我想用相应的 y 值标记水平条形图的每个条形。但是,我只能获得数字表示,而不能获得实际的符号值。
\documentclass[border=5mm]{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
xbar,
axis y line=center,
axis x line=center,
bar width=4pt,
bar shift=0pt, %% <-- added
y=4pt,
visualization depends on={y \as \rawy},
nodes near coords={\rawy},, nodes near coords align={horizontal}, nodes near coords style={font=\tiny},
symbolic y coords={A,B,C,D,E,F},
yticklabels=\empty,
]
\addplot[fill=blue] coordinates { (-58,A) (-45,B) (-43,C) };
\addplot[fill=red] coordinates {
(19,D)
(35,E)
(65,F)
};
\end{axis}
\end{tikzpicture}
\end{document}
这是使用不同 y 刻度作为标签而不是预期的符号值的内部表示的结果。
答案1
编辑(1):
- 如果我正确理解了您的问题,那么在坐标节点附近的节点中,应该有符号坐标。我说得对吗?
编辑(2):
- 您尝试从行读取数据,但失败了,因为您的数据没有组织成表格(包含行和列)。
- 通过在简单的表格中收集数据(而不是通过坐标来书写数据),解决方案非常简单。
- 我认为使用表格是优点而不是缺点。我相信,自动生成表格比收集坐标更简单。
\documentclass[border=3.141592]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
axis x line=left,
axis y line=center,
enlargelimits={lower, 0.2},
%
xbar=11pt,
bar shift=0pt,
%
xtick={-80,-60,...,60},
ytick=\empty,
y=11pt,
%
symbolic y coords={A,B,C,D,E,F},
point meta=explicit symbolic,
nodes near coords,
nodes near coords align={horizontal},
]
\addplot[fill=blue!70,
nodes near coords style={font=\small, anchor=east},
] table[meta=Y] {
X Y
-58 A
-45 B
-43 C
};
\addplot[fill=red,
nodes near coords style={font=\small, anchor=west},
] table[meta=Y] {
X Y
19 D
35 E
56 F
};
\end{axis}
\end{tikzpicture}
\end{document}