TikZ 数据可视化中输入数据的功能

TikZ 数据可视化中输入数据的功能

我有一个包含三列的 CSV 文件。我想制作一个散点图,其中第一列中的数字作为绘图点的 x 值,每行上其他两个数字的比率作为它们的 y 值。

通常,我希望从 CSV 文件中读取数据,并定义新属性,这些新属性是来自文件的属性的函数。这类似于functionTikZ 手册第 81.4 节中描述的输入格式,不同之处在于“独立变量”不是从区间中获取,而是从 CSV 文件的相应列中获取。

如果 TikZ 无法做到这一点datavisualization,那么 PGFPlots 可以做到吗?我从未使用过它。如果两者都无法做到,我将使用awk或类似的东西将计算值粘贴到文件每行的末尾。

以下是我的真实 LaTeX 文件的略微修改版本。编译失败,因为和与的定义seqpar来自同一块,但这个最小的非工作示例说明了我想要做的事情。dataspeedup

\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}

在此处输入图片描述

相关内容