我有一个包含三列的 CSV 文件。我想制作一个散点图,其中第一列中的数字作为绘图点的 x 值,每行上其他两个数字的比率作为它们的 y 值。
通常,我希望从 CSV 文件中读取数据,并定义新属性,这些新属性是来自文件的属性的函数。这类似于function
TikZ 手册第 81.4 节中描述的输入格式,不同之处在于“独立变量”不是从区间中获取,而是从 CSV 文件的相应列中获取。
如果 TikZ 无法做到这一点datavisualization
,那么 PGFPlots 可以做到吗?我从未使用过它。如果两者都无法做到,我将使用awk
或类似的东西将计算值粘贴到文件每行的末尾。
以下是我的真实 LaTeX 文件的略微修改版本。编译失败,因为和与的定义seq
不par
来自同一块,但这个最小的非工作示例说明了我想要做的事情。data
speedup
\documentclass[tikz]{standalone}
\usetikzlibrary{datavisualization.formats.functions}
\begin{document}
\begin{tikzpicture}
\datavisualization [
scientific axes,
x axis={attribute=nproc},
y axis={attribute=speedup},
visualize as scatter,
]
data {
nproc, seq, par
1, 10.1, 10.3
2, 12.7, 5.8
4, 9.3, 2.9
10, 11.4, 1.5
20, 9.9, 0.6
}
data [format=function] {
func speedup = \value seq / \value par;
}
;
\end{tikzpicture}
\end{document}
答案1
首先,如果 无法实现这一点,我会感到惊讶datavisualization
。但是,我几乎从未使用过此工具,并且对 感觉更舒服一些pgfplots
,您可以简单地说
y expr=\thisrow{seq}/\thisrow{par}
使垂直坐标成为两个不同行条目的商。可以使用declare function
等,但这是一个非常基本的示例。
\documentclass[tikz,border=3mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.17}
\begin{document}
\begin{tikzpicture}
\begin{axis}[xlabel={$n_\mathrm{proc}$},ylabel=speedup]
\addplot[scatter,only marks] table[col sep=comma,x=nproc,y expr=\thisrow{seq}/\thisrow{par}]{
nproc, seq, par
1, 10.1, 10.3
2, 12.7, 5.8
4, 9.3, 2.9
10, 11.4, 1.5
20, 9.9, 0.6
};
\end{axis}
\end{tikzpicture}
\end{document}