我想尝试绘制非数值数据来为常见的数值数据提供一些信息。前者有助于理解后者。
因此在 MWE 中,它只是一列额外的数据,只是为了开始这个。在本例中它是二进制数据。
我认为这可能相当简单,即\addplot
在我将数据伪造为一个值(您会注意到它是最大值+2
)后使用另一个命令添加数据。注意:这当然意味着始终重新处理绘图所基于的数据,我很乐意使用一种方法来避免这样做。:)
所以我对二进制数据做了同样的事,但对于文本输入,我不知道该怎么做。由于不同的值 AA、BB 等等仅与 1 个对象(过程)相关,这比我想象的要复杂得多。有人碰巧有个聪明的主意吗?:) 我也很高兴有一个解决方案,人们不必再次处理数据来创建额外的列。:)
是否可以将专栏的内容text
打印出来0.5*\ymax
?
MWE 的图片
平均能量损失
\documentclass{scrartcl}
\usepackage{pgfplotstable}
\begin{filecontents}{data.txt}
process,ColHeadAA,ColHeadBB,ColHeadCC,TEST,fake,text
1,17,19,15,yes,22,abc
2,10,8,11,no,,def
3,20,5,16,yes,22,GGG
4,14,4,10,no,,JJJ
\end{filecontents}
\pgfplotstableread[col sep=comma]{data.txt}{\mydata}
\begin{document}
\begin{center}
\begin{tikzpicture}
\begin{axis}[
xlabel=x,
ylabel=Things,
ybar,
xtick=data,
]
\addplot table[x=process, y=ColHeadAA] {\mydata};
\addplot table[x=process, y=ColHeadBB] {\mydata};
\addplot [only marks, red] table[x=process, y=fake] {\mydata};
\end{axis}
\end{tikzpicture}
\end{center}
\end{document}
答案1
要自动将非数字数据定位到每个 x 坐标的最高条上方,您可以使用y expr={max(\thisrow{ColHeadAA}, \thisrow{ColHeadBB})}
。要打印非数字数据,请point meta=explicit symbolic, nodes near coords
在\addplot
选项中设置,并meta=TEST
在table
选项中设置。
\documentclass{scrartcl}
\usepackage{pgfplots, pgfplotstable}
\begin{filecontents}{data.txt}
process,ColHeadAA,ColHeadBB,ColHeadCC,TEST,text
1,17,19,15,yes,abc
2,10,8,11,no,def
3,20,5,16,yes,GGG
4,14,4,10,no,JJJ
\end{filecontents}
\pgfplotstableread[col sep=comma]{data.txt}{\mydata}
\begin{document}
\begin{center}
\begin{tikzpicture}
\begin{axis}[
xlabel=x,
ylabel=Things,
ybar,
xtick=data,
]
\addplot table[x=process, y=ColHeadAA] {\mydata};
\addplot table[x=process, y=ColHeadBB] {\mydata};
\addplot [only marks, nodes near coords, point meta=explicit symbolic]
table [
x=process,
y expr={max(\thisrow{ColHeadAA}, \thisrow{ColHeadBB})},
meta=TEST
] {\mydata};
\end{axis}
\end{tikzpicture}
\end{center}
\end{document}