在指定位置添加分类 xticklabels

在指定位置添加分类 xticklabels

我正在尝试制作分类数据的条形图,其中每个类别都有一个分数,并且类别中的项目数由条形的宽度表示。基于来自 CSV 文件的条形图,条宽可调我尝试使用以下命令在 x 轴上添加类别标签xticklabels from table

\documentclass[border=5mm]{standalone}
\usepackage{filecontents}
\usepackage{pgfplots, pgfplotstable}

\begin{filecontents}{data.csv}
name  height width
foo   1      884
bar   2      5768
baz   3      835
qux   7      2661
quux  10     492
corge 11     1349
clyde 11     0
\end{filecontents}

\begin{document}
\begin{tikzpicture}
\begin{axis}[xticklabels from table={data.csv}{name},
typeset ticklabels with strut
]
\addplot [ybar interval, fill=yellow] table [
        create on use/xaccum/.style={
            create col/expr=\pgfmathaccuma+\prevrow{width}
        },
        x=xaccum, y=height
    ] {data.csv};
\end{axis}
\end{tikzpicture}
\end{document}

但是,此解决方案并未将 xticklabels 与条形图对齐:

在此处输入图片描述

我正在考虑添加一个extra description节点或extra x tick,或者在绘图后使用一个额外的循环来根据新的“xaccum”列添加节点,但我不确定如何实现这样的事情。

附加问题:如何删除 10e4?

也欢迎其他解决方案(带或不带 pgfplots)。原则上,我可以根据需要预先计算或修改数据(使用 LaTeX 或其他方式)。一个例子是(自动)在窄条之前和之后添加零高度无标签行,以防止标签重叠。

答案1

这不是一个完美的解决方案,但如果您想保持条宽显示作为节点重复的“某些东西”,希望这是一个好的开始。

有关详细信息,请查看代码中的注释。

% PGFPlots v1.15
    \begin{filecontents}{data.csv}
        name  height width
        foo   1      884
        bar   2      5768
        baz   3      835
        qux   7      2661
        quux  10     492
        corge 11     1349
        clyde 11     0
    \end{filecontents}
\documentclass[border=5pt]{standalone}
\usepackage{filecontents}
\usepackage{pgfplots, pgfplotstable}
\begin{document}
\begin{tikzpicture}
    \begin{axis}[
        xticklabels from table={data.csv}{name},
        typeset ticklabels with strut,
        % to align the `xticklabels` properly
        % (although they overlap now)
        xtick=data,
        % to remove the "10^4"
        scaled ticks=false,
        % to add nodes with the `width' value
        nodes near coords,
        point meta=explicit,
    ]
        \addplot [ybar interval, fill=yellow] table [
            create on use/xaccum/.style={
                create col/expr=\pgfmathaccuma+\prevrow{width}
            },
            x=xaccum,
            y=height,
            meta=width,     % <-- also added to display the `width' value
        ] {data.csv};
    \end{axis}
\end{tikzpicture}
\end{document}

该图显示了上述代码的结果

相关内容