我在 pgfplots 中有一个颜色条,并且想将 y 刻度标签对齐到右侧。
使用
colorbar style={yticklabel style={align=right}}
对我没用。
左边的颜色条显示默认行为,右边的颜色条显示想要的行为,但代码很笨拙(见下面的 MWE)。
梅威瑟:
\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
hide axis,
scale only axis,
height=0pt,
width=0pt,
colorbar,
point meta min=-20,
point meta max=20,
colorbar style={
height=10cm,
}]
\addplot [draw=none] coordinates {(0,0)};
\end{axis}
\end{tikzpicture}
\begin{tikzpicture}%[xshift=2cm]
\begin{axis}[
hide axis,
scale only axis,
height=0pt,
width=0pt,
colorbar,
point meta min=-20,
point meta max=20,
colorbar style={
yticklabel={$$},
height=10cm,
}]
\addplot [draw=none] coordinates {(0,0)};
\end{axis}
\foreach \x [evaluate=\x as \xeval using 20-\x*4] in {0,1.25,...,10}
\node[anchor=east] at (1.75,-\x) {\pgfmathprintnumber{\xeval}};
\end{tikzpicture}
\end{document}![enter image description here][3]
答案1
我猜问题在于包含刻度标签的节点仅与单个刻度标签的宽度一样宽,因此即使你对齐它们right
,也不会使它们与其他刻度对齐。
解决方法是先设置 ticklabel 节点的最小宽度,然后更改对齐方式:
colorbar style={
height=10cm,
yticklabel style={text width=width("$-20$"),align=right}
}
不过,您必须手动插入最宽的刻度标签width("..")
,因此它不是完全自动的。
width
(与vs.有关的注释\widthof
:pgf
/TikZ 2.x 实现了一个宏\widthof
来计算某些文本的宽度。这在版本 3 中被删除了,但是可以使用数学引擎width
中定义的函数,pgf
如上所示。但是包\widthof
中定义了一个宏calc
。)
下面我还添加了draw
,yticklabel style
以说明这一点。
\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.14}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
hide axis,
scale only axis,
height=0pt,
width=0pt,
colorbar,
point meta min=-20,
point meta max=20,
colorbar style={
height=10cm,yticklabel style={draw,align=right}
}]
\addplot [draw=none] coordinates {(0,0)};
\end{axis}
\end{tikzpicture}
\begin{tikzpicture}
\begin{axis}[
hide axis,
scale only axis,
height=0pt,
width=0pt,
colorbar,
point meta min=-20,
point meta max=20,
colorbar style={
height=10cm,yticklabel style={draw,text width=width("$-20$"),align=right}
}]
\addplot [draw=none] coordinates {(0,0)};
\end{axis}
\end{tikzpicture}
\begin{tikzpicture}%[xshift=2cm]
\begin{axis}[
hide axis,
scale only axis,
height=0pt,
width=0pt,
colorbar,
point meta min=-20,
point meta max=20,
colorbar style={
yticklabel={$$},
height=10cm,
}]
\addplot [draw=none] coordinates {(0,0)};
\end{axis}
\foreach \x [evaluate=\x as \xeval using 20-\x*4] in {0,1.25,...,10}
\node[anchor=east] at (1.75,-\x) {\pgfmathprintnumber{\xeval}};
\end{tikzpicture}
\end{document}