我正在使用绘制一些时间结果pgfplots
。时间以对数刻度显示。
这三种技术最终都会以超时结束,我想以某种方式在图表中显示这一点。
我认为以某种方式显示从图表顶部射出的三条线会很好。例如,当线程数为 4 时,技术 A 会超时,因此我非常希望在 x=4 处添加一个绿色数据点,该数据点位于 y 轴当前范围上方几毫米处。
我们也欢迎有关如何描绘“暂停”的其他建议。
\documentclass{article}
\usepackage{tikz,pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{semilogyaxis}[xlabel=Number of threads, ylabel=Simulation time /s, legend
pos=south east]
\addplot[color=green,mark=square] coordinates {
(1, 0.006)
(2, 0.061)
(3, 25)
};
\addplot[color=blue,mark=x] coordinates {
(1, 0.006)
(2, 0.009)
(3, 0.053)
(4, 1.3)
(5, 70)
};
\addplot[color=red,mark=+] coordinates {
(1, 0.360)
(2, 0.370)
(3, 0.360)
(4, 0.462)
(5, 3.2)
(6, 120)
};
\legend{Technique A, Technique B, Technique C}
\end{semilogyaxis}
\end{tikzpicture}
\end{document}
答案1
垂线
超时可以解释为垂直时间轴的无限值,通过垂直线可视化,以清楚地表明永远不会到达下一个线程。
\documentclass{article}
\usepackage{tikz,pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{semilogyaxis}[
xlabel=Number of threads,
ylabel=Simulation time in s,
legend pos=south east,
ymax=250,
]
\addplot[color=green,mark=square] coordinates {
(1, 0.006)
(2, 0.061)
(3, 25)
(3, 1000)
};
\addplot[color=blue,mark=x] coordinates {
(1, 0.006)
(2, 0.009)
(3, 0.053)
(4, 1.3)
(5, 70)
(5, 1000)
};
\addplot[color=red,mark=+] coordinates {
(1, 0.360)
(2, 0.370)
(3, 0.360)
(4, 0.462)
(5, 3.2)
(6, 120)
(6, 1000)
};
\legend{Technique A, Technique B, Technique C}
\node[above right] at (rel axis cs:0, 1) {Time out:};
\end{semilogyaxis}
\end{tikzpicture}
\end{document}
数据点超出范围,超时
基本上这个变体与 Torbjørn T. 的类似回答,绘制一条到绘图区域外部的连接线。
不过我不太喜欢连接线,因为它们的斜率较小,破坏了曲线形状。
因此,该示例没有连接超时点,而是用“超时”标记这些点。
\documentclass{article}
\usepackage{tikz,pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{semilogyaxis}[
xlabel=Number of threads,
ylabel=Simulation time in s,
legend pos=south east,
xmax=7.5,
ymax=200,
clip=false,
]
\addplot[color=green,mark=square] coordinates {
(1, 0.006)
(2, 0.061)
(3, 25)
};
\addplot[color=blue,mark=x] coordinates {
(1, 0.006)
(2, 0.009)
(3, 0.053)
(4, 1.3)
(5, 70)
};
\addplot[color=red,mark=+] coordinates {
(1, 0.360)
(2, 0.370)
(3, 0.360)
(4, 0.462)
(5, 3.2)
(6, 120)
};
\addplot[color=green, mark=square] coordinates {(4, 320)};
\addplot[color=blue, mark=x] coordinates {(6, 320)};
\addplot[color=red, mark=+] coordinates {(7, 320)};
\legend{Technique A, Technique B, Technique C}
\node[above right] at (rel axis cs:0, 1) {Time out:};
\end{semilogyaxis}
\end{tikzpicture}
\end{document}
答案2
我不确定这是否与您所想的一样,但如果您添加另一个数据点,将设置ymax
为比这个新数据点的 y 值更小的值,最后添加clip=false
,您就会得到延伸出轴的绘图线。
\documentclass{article}
\usepackage{tikz,pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{semilogyaxis}[
xlabel=Number of threads,
ylabel=Simulation time /s,
legend pos=south east,
ymax=200,
clip=false]
\addplot[color=green,mark=square] coordinates {
(1, 0.006)
(2, 0.061)
(3, 25)
(4,300)
};
\addplot[color=blue,mark=x] coordinates {
(1, 0.006)
(2, 0.009)
(3, 0.053)
(4, 1.3)
(5, 70)
(5.5,300)
};
\addplot[color=red,mark=+] coordinates {
(1, 0.360)
(2, 0.370)
(3, 0.360)
(4, 0.462)
(5, 3.2)
(6, 120)
(6.3,300)
};
\legend{Technique A, Technique B, Technique C}
\end{semilogyaxis}
\end{tikzpicture}
\end{document}