我正在尝试绘制一个表格,其中各列中的元素数量不同。在 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}