从 .csv 文件绘制 3D 数据集

从 .csv 文件绘制 3D 数据集

我有一个.csv包含二维数据的图表。现在我尝试将其绘制在不同的索引中-n:1:n(此索引为y-axis)。

\documentclass[border=10pt]{standalone}
\usepackage{pgfplots}
\pgfplotsset{width=7cm,compat=1.8}
\usepackage{pgfplotstable}
\begin{document}
\begin{tikzpicture}

\pgfplotstableread{
T3,v11
0,0.66582
0.000125,0.66582
0.00025,0.66582
0.000375,0.66582
0.0005,0.66582
0.000625,0.66582
0.00075,0.66582
0.000875,0.66582
0.001,0.66582
0.001125,0.66582
}\dummydata
\begin{axis}[
    domain=-4:4,
    samples y=0, ytick={1,...,4},
]
{
    \addplot3 table [x =T3, y expr=1, z=v11, col sep = comma]
      {\dummydata};
}
\end{axis}
\end{tikzpicture}
\end{document}

这将引发如下错误:

!包 pgfplots 错误:所请求的 \dummydata 索引为 1 的列表条目太大;该列表没有足够的元素。

请参阅 pgfplots 包文档以了解解释。输入 H 可立即获得帮助。...

                                               l.27       {\dummydata};
                     This error message was generated by an \errmessage command, so I can't give any explicit help. Pretend that

你是赫尔克里·波洛:检查所有线索,并按照顺序和方法推断真相。

!包 pgfplots 错误:抱歉,无法从表 '' 中检索列 'T3'。请检查拼写(或引入名称别名)。

请参阅 pgfplots 包文档以了解解释。输入 H 可立即获得帮助。...

                                               l.27       {\dummydata};
                     (That was another \errmessage.)

!包 pgfplots 错误:抱歉,无法从表 '' 中检索列 'v11'。请检查拼写(或引入名称别名)。

请参阅 pgfplots 包文档以了解解释。输入 H 可立即获得帮助。...

                                               l.27       {\dummydata};
                     (That was another \errmessage.)

包 pgfplots 警告:当前图在输入行 27 上没有坐标(或所有坐标已被过滤掉)。

[警告/pgfplots/warning/plot 没有坐标]

包 pgfplots 警告:您的轴有空范围(在 z 方向上)。用默认范围替换它并清除所有图。在输入行 29。

[警告/pgfplots/warning/空范围清除轴] LaTeX 字体信息:cmex10' loaded for size (Font) <7> on input line 29. LaTeX Font Info: External font在输入行 29 上,外部字体 cmex10' 已加载,大小为 (字体) <5>。

但是,如果我不使用.csv格式,而是坚持使用表格格式(即删除数据之间以及col sep = comma图表中的逗号,那么我就会得到我想要的结果。但是,我拥有的数据是.csv格式化的(相当大)。因此,我不用创建一个庞大的数据集y-axis,而是用上面提到的脚本来实现它。

无需.csv格式即可工作的(并且无需为不同的轴创建庞大的数据集):

\documentclass[border=10pt]{standalone}
\usepackage{pgfplots}
\pgfplotsset{width=7cm,compat=1.8}
\usepackage{pgfplotstable}
\begin{document}
\begin{tikzpicture}

\pgfplotstableread{
T3 v11
0 0.66582
0.000125 0.66582
0.00025 0.66582
0.000375 0.66582
0.0005 0.66582
0.000625 0.66582
0.00075 0.66582
0.000875 0.66582
0.001 0.66582
0.001125 0.66582
}\dummydata
\begin{axis}[
    domain=-4:4,
    samples y=0, ytick={1,...,4},
]
{
    \addplot3 table [x =T3, y expr=1, z=v11]
      {\dummydata};
}
\end{axis}
\end{tikzpicture}
\end{document}

这将给我所需的输出:

在此处输入图片描述

PS:这只是一个例子,实际上我使用外部文件导入我的数据进行绘图。

答案1

移至正确位置后col sep=comma,错误就消失了。

\documentclass[border=10pt]{standalone}
\usepackage{pgfplots}
\pgfplotsset{width=7cm,compat=1.8}
\usepackage{pgfplotstable}
\begin{document}
\begin{tikzpicture}

\pgfplotstableread[col sep = comma]{
T3,v11
0,0.66582
0.000125,0.66582
0.00025,0.66582
0.000375,0.66582
0.0005,0.66582
0.000625,0.66582
0.00075,0.66582
0.000875,0.66582
0.001,0.66582
0.001125,0.66582
}\dummydata
\begin{axis}[
    domain=-4:4,
    samples y=0, ytick={1,...,4},
]
{
    \addplot3 table [x =T3, y expr=1, z=v11]
      {\dummydata};
}
\end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

简要解释:加载数据时,您需要告知pgfplots文件的结构,即如何将其分解为行和列,即单元格。如果您没有告知pgfplots列之间用逗号分隔,那么认为它们之间用空格或制表符分隔,这就是第二个示例有效的原因。在第一个示例中,pgfplots“认为”第一个非标题行只有单元格,0,0.66582而不是两个单元格00.66582等等,这解释了错误消息。是的,我明白这可能会造成混淆,毕竟您只在图中指定哪一列放在哪里。

相关内容