我正在使用 LaTeX、TikZ 和 PGFplot 来自动生成多个图表系列,其中一个由条形图组成。每个条形图中的每个条形可能都有一个唯一的标签和高度——我以前使用过 PGFplot,我知道我可以从文件中读取坐标,但我是否可以使用存储在制表符分隔文件中的文本数据为每个条形创建标签?如果可以,我该怎么做?下面显示了我可能使用的文件的简化示例。
# foo.dat
# Label | X-Position | Height
A 1 15
B 2 20
C 3 12
D 4 24
感谢您的帮助!
答案1
根据您是否想使用标签代替 x 刻度标签,或将其作为每个条形的附加信息,这里有两种方法。
您可以使用键xticklabels from table={<table or file name>}{<column name>}
来指定从哪一列读取标签。这些标签将显示出来,而不是条形的 x 坐标。请注意,您还应该使用选项xtick=data
(关键字“数据”是内置的)来确保仅在绘制条形的位置创建刻度。
如果要保留 x 刻度标签,可以使用 在每个条形图顶部添加文本标签nodes near coords
。这将在每个条形图上方添加一个文本节点,其中包含meta
该点的数据。默认情况下,这是 y 坐标。您可以使用关键字选项指定要使用哪一列作为元数据meta=<column name>
。table
请注意,对于文本数据,您必须为绘图提供选项point meta=explicit
,否则需要数字数据。
\documentclass{article}
\usepackage{pgfplots}
\usepackage{filecontents}
\begin{filecontents}{testdata.dat}
Label X-Position Height
A 1 15
B 2 20
C 3 12
D 4 24
\end{filecontents}
%
\begin{document}
\begin{tikzpicture}
\begin{axis}[
ybar,
xtick=data,% crucial line for the xticklabels directive
ymin=0,
xticklabels from table={testdata.dat}{Label}
]
\addplot table [
x=X-Position,
y=Height
] {testdata.dat};
\end{axis}
\end{tikzpicture}
%
\hspace*{0.5cm}
%
\begin{tikzpicture}
\begin{axis}[
ybar,
xtick=data,
ymin=0
]
\addplot +[
nodes near coords,
point meta=explicit symbolic
]
table [x=X-Position,
y=Height,
meta=Label
] {testdata.dat};
\end{axis}
\end{tikzpicture}
\end{document}