已排序数据的 xticklabels

已排序数据的 xticklabels

我正在尝试对文件中的数据进行排序,然后对其进行绘图。此代码似乎可以做到这一点。

\usepackage{filecontents}
\begin{filecontents*}{data.dat}
name,b
sue,5
jean,3
jim,4
\end{filecontents*}
\pgfplotstableread[col sep=comma]{data.dat}{\datatable}
\pgfplotstablesort[sort key={b}]{\sorted}{\datatable}
\pgfplotstableset{
    create on use/rank/.style=
        {create col/set list={1,2,3}}}
\begin{document}
\begin{tikzpicture}
  \begin{axis}
    \addplot+ [only marks] table [x=rank,y=b] {\sorted};
  \end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

我想使用排序数据中“名称”列中的标签(名称)作为 xticklabels。这是我能得到的最接近的结果:

\documentclass{standalone}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\usepackage{filecontents}
\begin{filecontents*}{data.dat}
name,b
sue,5
jean,3
jim,4
\end{filecontents*}
\pgfplotstableread[col sep=comma]{data.dat}{\datatable}
\pgfplotstablesort[sort key={b}]{\sorted}{\datatable}
\pgfplotstableset{
    create on use/rank/.style=
        {create col/set list={1,2,3}}}
\begin{document}
\begin{tikzpicture}
  \begin{axis}[xticklabels from table={\sorted}{name}]
    \addplot+ [only marks] table [x=rank,y=b] {\sorted};
  \end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

我的代码存在缺陷,这显然会引发问题。如何让所有名称都显示为 xticklabel,并遵循排序数据中的顺序?

答案1

正如在问题下方的评论您只需添加xtick=data即可实现您想要的。

% used PGFPlots v1.16
    \begin{filecontents*}{data.dat}
        name,b
        sue,5
        jean,3
        jim,4
    \end{filecontents*}
\documentclass[border=5pt]{standalone}
\usepackage{pgfplotstable}
    \pgfplotstableread[col sep=comma]{data.dat}{\datatable}
    \pgfplotstablesort[sort key={b}]{\sorted}{\datatable}
    \pgfplotstableset{
        create on use/rank/.style={
            create col/set list={1,2,3},
        },
    }
\begin{document}
\begin{tikzpicture}
    \begin{axis}[
        % add `xtick=data' to show only ticks where data points of the
        % *first* `\addplot' command (only) exist
        xtick=data,
        xticklabels from table={\sorted}{name},
        % (add this so the labels have the same baseline)
        typeset ticklabels with strut,
    ]
        \addplot+ [only marks] table [x=rank,y=b] {\sorted};
    \end{axis}
\end{tikzpicture}
\end{document}

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

相关内容