PGFplots 和表的列中元素数量不同

PGFplots 和表的列中元素数量不同

我正在尝试绘制一个表格,其中各列中的元素数量不同。在 MWE 中,对 (x1,y1),...,(x4,y4) 的元素数量都不同,在这种情况下我可以使用 PGFplots 吗,而不必手动排列表格或将其分成 4 个不同的表格?

\documentclass{standalone}

\usepackage{pgfplots}
\usepackage{pgfplotstable}

\pgfplotstableread{
x1 y1  x2 y2   x3 y3  x4 y4
1  0.5 1  0.2  1  0.1 1  0.3
2  0.7 2  0.4  2  0.2 2  0.5
3  0.3 3  0.6  3  0.4 3  0.6
4  0.1 4  0.3  4  0.4
       5  0.2  5  0.2
               6  0.2 
               7  0.1
}\mytable

\pgfplotsset{%
    compat=1.8,
    compat/show suggested version=false,
}

\begin{document}
\begin{tikzpicture}
\begin{axis}[xlabel={x-axis},ylabel={y-axis}]
    \addplot table[x=x1,y=y1] {\mytable};
    \addplot table[x=x2,y=y2] {\mytable};
    \addplot table[x=x3,y=y3] {\mytable};
    \addplot table[x=x4,y=y4] {\mytable};
    \legend{1,2,3,4}
\end{axis}
\end{tikzpicture}
\end{document}

答案1

除非您使用不同的col sep,否则您将需要使用空组。

来自pgfplotstable手册,第 2.1 节“文本表输入格式”,第 5f 页:

此外,如果在情况下您需要空单元格col sep≠space,则必须提供{}来分隔这样的单元格,因为col sep=space使用至少一个空格(消耗所有后续空格)。

这是 TeX 处理空格的通常方式。

另一种解决方案是使用不同的列分隔符,例如逗号:

\pgfplotstableread[col sep=comma]{
x1, y1,x2, y2,x3, y3,x4, y4
 1,0.5, 1,0.2, 1,0.1, 1,0.3
 2,0.7, 2,0.4, 2,0.2, 2,0.5
 3,0.3, 3,0.6, 3,0.4, 3,0.6
 4,0.1, 4,0.3, 4,0.4,  ,
  ,   , 5,0.2, 5,0.2,  ,
  ,   ,  ,   , 6,0.2,  ,
  ,   ,  ,   , 7,0.1,  ,
}\mytable

(这里的空格仅供视觉参考。)对于pgfplots无论如何都会被解析的简单数字,额外的空格不会造成损害,但对于其他各种用例,该选项/pgfplots/table/trim cells可能会有所帮助。

代码

\documentclass{standalone}

\usepackage{pgfplots}
\usepackage{pgfplotstable}

\pgfplotstableread{
x1 y1  x2 y2   x3 y3  x4 y4
1  0.5 1  0.2  1  0.1 1  0.3
2  0.7 2  0.4  2  0.2 2  0.5
3  0.3 3  0.6  3  0.4 3  0.6
4  0.1 4  0.3  4  0.4 {} {}
{} {}  5  0.2  5  0.2 {} {}
{} {}  {} {}   6  0.2 {} {} 
{} {}  {} {}   7  0.1 {} {}
}\mytable

\pgfplotsset{%
    compat=1.8,
    compat/show suggested version=false,
}

\begin{document}
\begin{tikzpicture}
\begin{axis}[xlabel={x-axis},ylabel={y-axis}]
    \addplot table[x=x1,y=y1] {\mytable};
    \addplot table[x=x2,y=y2] {\mytable};
    \addplot table[x=x3,y=y3] {\mytable};
    \addplot table[x=x4,y=y4] {\mytable};
    \legend{1,2,3,4}
\end{axis}
\end{tikzpicture}
\end{document}

输出

在此处输入图片描述

相关内容