是否可以在正常图中将非数字数据与正常数据一起绘制?

是否可以在正常图中将非数字数据与正常数据一起绘制?

我想尝试绘制非数值数据来为常见的数值数据提供一些信息。前者有助于理解后者。

因此在 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=TESTtable选项中设置。

\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}

相关内容