![已排序数据的 xticklabels](https://linux22.com/image/378747/%E5%B7%B2%E6%8E%92%E5%BA%8F%E6%95%B0%E6%8D%AE%E7%9A%84%20xticklabels.png)
我正在尝试对文件中的数据进行排序,然后对其进行绘图。此代码似乎可以做到这一点。
\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}