垂线

垂线

我正在使用绘制一些时间结果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}

相关内容