根据文件描述创建条形图

根据文件描述创建条形图

我想

  • 创建条形图
  • 直接从文件读取数据,
  • 直接在栏内/上方添加详细描述
  • 并将实际值写在实际坐标附近
  • 根据列设置条形颜色

我希望的结果是这样的:

那将是梦想

这就是我目前得到的:

这就是我目前得到的

\documentclass{article}
\usepackage[utf8x]{inputenc}
\usepackage{pgfplots,pgfplotstable}

\pgfplotsset{compat=1.9}
\pgfplotstableread[col sep=comma]{
surname,prename,values
Miller,Martin,0.8
Public,John,0.4
Miller,Catherine,0.6
}\testdata

\begin{document}

    \begin{tikzpicture}
        \begin{axis}[
                xbar,
                ytick = data,
                yticklabels from table={\testdata}{surname},
                major y tick style = transparent,
                ]
            \addplot table[y expr=\coordindex,x=values]{\testdata};
        \end{axis}
    \end{tikzpicture}

\end{document}

答案1

您可以使用 放置条形图的描述nodes near coords。默认情况下,这将打印meta条形图末尾的值,而该值又默认为因变量(在本例中为 x 坐标)。

要打印该prename值,需要几个步骤:首先,您需要使该列的内容可供 PGFPlots 使用。您可以通过添加point meta=explicit symbolic\addplot选项(指示 PGFPlots 期望每个数据点都有某种非数字辅助数据)来实现这一点。table然后,您可以在选项中设置meta=prename。然后,通过使用,该列的内容prename将可用于每个数据点\pgfkeysvalueof{/pgfplots/meta}

然后,您需要找到一种方法将其打印在所需的位置。不幸的是,nodes near coords只能打印一个节点。幸运的是,您可以教 PGFPlots 通过使用“搭载”到此节点来打印额外的节点every node near coord/.append style={append after command=node {<some text>}。这将附加node {<some text>}在标签节点之后。

为了正确定位这个额外的节点,您需要移动它。默认情况下,它位于条形图的顶端。要将其定位在条形图的底部,您可以使用node [anchor=west] at (axis direction cs:-\pgfkeysvalueof{/data point/x}+\pgfkeysvalueof{/pgfplots/xmin},0)注意:/pgfplots/xmin只有当您希望条形图从零以外的某个值开始时,才是必要的,这通常不是一个好主意。正如 Ethan 在评论中指出的那样,这通常会产生误导。如果您想通过减小绘图范围来突出显示差异,请考虑使用点而不是条形图。

您会注意到,如果执行此操作,prename列的内容会打印两次:一次在底部,一次在顶部。要取回 x 值,请设置nodes near coords=\pgfkeysvalueof{/data point/x}(而不仅仅是nodes near coords,这是 的简写nodes near coords=\pgfmathprintnumber{\pgfplotspointmeta})。

以下是我们努力的结果:

...代码如下:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{pgfplots,pgfplotstable}

\pgfplotsset{compat=1.9}
\pgfplotstableread[col sep=comma]{
surname,prename,values
Miller,Martin,0.8
Public,John,0.4
Miller,Catherine,0.6
}\testdata

\begin{document}

    \begin{tikzpicture}
        \begin{axis}[
                    xmin=0,
                xbar,
                ytick = data,
                yticklabels from table={\testdata}{surname},
                major y tick style=transparent,
                point meta=explicit symbolic
                ]
            \addplot +[
                    nodes near coords=\pgfkeysvalueof{/data point/x},
                    every node near coord/.append style={
                        anchor=west, 
                        append after command={
                            node [anchor=west] at (axis direction cs:-\pgfkeysvalueof{/data point/x}+\pgfkeysvalueof{/pgfplots/xmin},0) {\pgfkeysvalueof{/data point/meta}}}
                    }
                ] table [y expr=\coordindex, meta=prename, x=values]{\testdata};
        \end{axis}
    \end{tikzpicture}

\end{document}

相关内容