来自 tikz 格式的 csv 文件的线图

来自 tikz 格式的 csv 文件的线图

我在 csv 文件中有以下损失图数据。列 (a) Epochs、(b) Test_loss、(c) Train_loss 和此数据的 10,000 行条目(总共 10,000 个 epoch)。我想以 tikz 格式绘制此图,该怎么做?

我的格式为;

\documentclass[tikz, border=1cm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\begin{document}
\begin{tikzpicture}
\begin{loglogaxis}[
xmin=0, xmax=1e2,
ymin=1e-7, ymax=1e1,
xlabel={Number of Epochs}, 
ylabel={Normalized MSE: $\log_{10} (e)$ },
label style={font=\bfseries\boldmath},
tick label style={font=\bfseries\boldmath},
scatter/classes={a={mark=square*, blue}, b={mark=triangle*, red}, c={mark=o, black}},
]
\addplot[scatter, only marks,
scatter src=explicit symbolic]
table[meta=label] {
x     y      label
};
\end{loglogaxis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

我的 csv 文件看起来像这样。

周期、测试损失、训练损失

0,0.203095777,0.234712227

1,0.202614659,0.234308232

2,0.202137079,0.233968432

csv 文件链接:我已将 2000 行数据集的前 20 行复制到此文件中,并将其命名为 3N5H_test.csv 。

csv 文件链接

答案1

我不确定您的 CSV 文件是什么样的,但根据您的描述猜测,一种简单的方法可能如下:我了解您得到了一个内容类似于以下内容的 CSV 文件:

Epoch, Test_loss, Train_loss, Test_metric
1,     0.02,      0.03,       0.025
1000,  0.01,      0.005,      0.015
...

\addplot在这种情况下,您可以通过为要绘制的每一列添加一个宏来简单地解析它,让其x成为Epoch列,并y让其具有相关值:

\documentclass[tikz, border=1cm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}

% your CSV file:
\begin{filecontents}{data.csv}
Epoch, Test_loss, Train_loss, Test_metric
1,     0.02,      0.03,       0.025
1000,  0.01,      0.005,      0.015
\end{filecontents}
% =====

\begin{document}
\begin{tikzpicture}
\begin{semilogyaxis}[
    xmin=0, xmax=1e4,
    ymin=1e-4, ymax=1e-1,
    scaled x ticks=false,
    xlabel={Number of Epochs}, 
    ylabel={Normalized MSE: $\log_{10} (e)$},
    label style={font=\bfseries\boldmath},
    tick label style={font=\bfseries\boldmath},
]
\addplot[scatter, no marks, draw=blue] 
    table [x=Epoch, y=Test_loss, col sep=comma] {data.csv};
\addplot[scatter, no marks, draw=red] 
    table [x=Epoch, y=Train_loss, col sep=comma] {data.csv};
\addplot[scatter, no marks, draw=orange] 
    table [x=Epoch, y=Test_metric, col sep=comma] {data.csv};
\end{semilogyaxis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

当然,您不需要将 CSV 数据包含在 TeX 文件中。只需将 CSV 文件放在存储 TeX 文件的同一目录中,然后写入,例如。在这种情况下,您可以忽略和\addplot[scatter, no marks, draw=blue] table [...] {<file name>};之间的内容(包括这两行),因为这只是为了使上述示例可编译。\begin{filecontents}{data.csv}\end{filecontents}


抱歉,我无法真正重现您遇到的问题。我根据您提供的数据调整了上述示例:

该文件3N5H.csv(请注意,CSV 文件中可能不应该有空行,因为这些空行会被解释为(空)数据点):

Epochs,Test_loss,Train_loss
0,0.203095777,0.234712227
1,0.202614659,0.234308232
2,0.202137079,0.233968432

TeX 文件:

\documentclass[tikz, border=1cm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}

\begin{document}
\begin{tikzpicture}
\begin{semilogyaxis}[
    % xmin=0, xmax=1e4,      % The output would not be visible otherwise
    % ymin=1e-4, ymax=1e-1,  % The output would not be visible otherwise
    scaled x ticks=false,
    enlargelimits,
    xlabel={Number of Epochs}, 
    ylabel={Normalized MSE: $\log_{10} (e)$},
    label style={font=\bfseries\boldmath},
    tick label style={font=\bfseries\boldmath},
]
\addplot[scatter, no marks, draw=blue] table [x=Epochs, y=Test_loss, col sep=comma] {3N5H.csv};
\addplot[scatter, no marks, draw=red] table [x=Epochs, y=Train_loss, col sep=comma] {3N5H.csv};
\end{semilogyaxis}
\end{tikzpicture}
\end{document}

结果:

在此处输入图片描述

相关内容