使用逗号作为小数分隔符从 CSV 文件绘图

使用逗号作为小数分隔符从 CSV 文件绘图

我正在尝试使用分号作为分隔符、逗号作为句点,从 CSV 文件中用 pgfplots 创建一个图。

我已尝试将其/pgf/number format/read comma as period作为参数解析为\axis\addplot

当用于\axis参数时会被忽略并发生错误,表明需要read comma as period参数。

当用于\addplotI received 时: 收到错误

我正在使用 MixTex 2.9.6888。

我的代码:

\documentclass{article}
\usepackage{tikz, pgfplots,siunitx}
\usepackage[lotdepth]{subfig}
\RequirePackage{filecontents}

\begin{filecontents*}{data.csv}
    Column1;MERENI;FI2;URMS2
    ;1;3,006;17,86
    ;2;3,997;20,49
    ;3;5,006;22,86
    ;4;6,009;25,31
    ;5;7,001;27,85
    ;6;8,005;30,52
    ;7;9,014;33,19
    ;8;10,001;35,99
    ;9;11,01;38,73
    ;10;12,005;41,52
\end{filecontents*}

\begin{document}
\begin{figure}
    \begin{tikzpicture}
        \begin{axis}
            [
            width=\linewidth,
            grid=major,
            grid style={dashed,gray!30},
            title={mytitle},
            ylabel=$U_[ef]$,
            xlabel=$f$,
            %/pgf/number format/read comma as period,
            y unit=\si{\volt},
            x unit=\si{\hertz},
            ymin = 0, xmin = 0      
            ]
            \addplot table[x=FI2, y=URMS2, col sep=semicolon, /pgf/number format/read comma as period] {data.csv};
    \end{axis}
    \end{tikzpicture}
 \end{figure}
 \end{document}

答案1

在花费(我必须承认,这是很天真的)时间滚动日志寻找“为什么无法pgfplots读取我的表格“,我发现问题与数据表的格式完全无关。实际上,如果您编译此代码,就会出现完全相同的错误:

\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
  \begin{axis}[ylabel=$U_[ef]$]
      \addplot coordinates {(0,0)(1,1)};
  \end{axis}
\end{tikzpicture}
\end{document}

这将会中断,因为环境采用由...axis分隔的可选参数。扫描分隔符时, TeX 将采用同一嵌套级别中的第一个分隔符([]]]IE不符合要求的是 中的右括号(不在括号内),而符合要求的是 中的右括号U_[ef],因此传递给 的文本axis将是ylabel=$U_[ef,这会导致不平衡$...$然后东西就会被破坏。

要解决此问题,您必须隐藏]括号,如下所示:

\begin{axis}[ylabel=$U_{[ef]}$]% DO use this

这个

\begin{axis}[{{ylabel=$U_[ef]$}}]% Don't use this

甚至这个

\begin{axis}[ylabel=$U_[ef{]}$]% Don't use this

也会编译,但输出不会像预期的那样,并且至少语法是可疑的。

您还缺少units要使用的库x unity unit。之后它将工作:

在此处输入图片描述

\documentclass{standalone}
\usepackage{tikz,pgfplots,siunitx}
\usepgfplotslibrary{units}
\RequirePackage{filecontents}
\begin{filecontents*}{data.csv}
    Column1;MERENI;FI2;URMS2
    ;1;3,006;17,86
    ;2;3,997;20,49
    ;3;5,006;22,86
    ;4;6,009;25,31
    ;5;7,001;27,85
    ;6;8,005;30,52
    ;7;9,014;33,19
    ;8;10,001;35,99
    ;9;11,01;38,73
    ;10;12,005;41,52
\end{filecontents*}
\begin{document}
  \begin{tikzpicture}
    \begin{axis}
      [
        width=\linewidth,
        grid=major,
        grid style={dashed,gray!30},
        title={mytitle},
        ylabel=$U_{[ef]}$,
        xlabel=$f$,
        %/pgf/number format/read comma as period,
        y unit=\si{\volt},
        x unit=\si{\hertz},
        ymin = 0, xmin = 0
      ]
      \addplot table[x=FI2, y=URMS2, col sep=semicolon, /pgf/number format/read comma as period] {data.csv};
    \end{axis}
  \end{tikzpicture}
\end{document}

相关内容