我制作了以下图表:
我在轴选项中已定义ymin = 4.4
。为了将 x 轴线放置在y = 0
但将 x 轴标签保留在图表底部,我使用:(axis x line shift= -4.4
与 相同的值ymin
)和xticklabel shift= 3cm
。
3cm 这个值只是我手动目测的。
有没有什么方法可以像设置 x 轴线移位一样,根据图形坐标设置其值?我制作了相当多的图表,厌倦了目测!
甚至更好的是,有没有办法确保 x 轴标签始终位于图表的底部(以及 y 轴结束后的某个适当空间)?
上述代码:
\documentclass{standalone}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\pgfplotsset{compat=1.17}
%colors
\usepackage{color}
\usepackage{xcolor}
\definecolor{c1}{HTML}{004B87} % blue
\definecolor{c2}{HTML}{E46425} % orange
\begin{document}
\pgfplotstableread[col sep=comma]{
date, yoy, qoq
1Q19, 4.5, 1.1
2Q19, 4.5, 1.1
3Q19, 4.5, 1.1
4Q19, 4.5, 1.1
1Q20, -3.7, -8.3
}\hchartone
\pgfplotsset{/pgfplots/ybar legend/.style={
/pgfplots/legend image code/.code={%
\draw[##1,/tikz/.cd, yshift = -0.25em, xshift = 0.6em]
(0cm,0cm) rectangle (0.6em,0.6em);},},
}
\begin{tikzpicture}
\small
\begin{axis}[
width = 8cm,
height = 8cm,
axis lines=left,
axis x line shift= -4.4,
enlarge x limits=0.1,
enlarge y limits={0.1, upper},
%
% y ticks style and label
ymin = -4.4,
ylabel={Annual change, \%},
ylabel shift = 0pt,
ytick distance = 1,
y tick label style={/pgf/number format/.cd, fixed, fixed zerofill, precision=1, /tikz/.cd, font=\scriptsize},
%
% x axis ticks and style
xticklabel shift= 3cm,
xtick=data,
xticklabels from table={\hchartone}{date},
table/x expr = \coordindex,
x tick label style = {rotate=0},
%
% legends and labels
legend cell align={left},
legend style = {fill = none,
draw=none,
legend columns=1,
at={(0.5,1.12)},
anchor=north,
/tikz/every even column/.append style={column sep=2em},
},
% nodes near coords
nodes near coords,
nodes near coords style = { /pgf/number format/.cd,
fixed, fixed zerofill, precision=1,
/tikz/.cd, font=\scriptsize, yshift=0cm, xshift = 0cm,
},
]
%
% done with the axis, now the plots
\addplot [ybar, ybar legend, c1, fill=c1, nodes near coords, draw opacity = 0]
table [y=yoy] {\hchartone};
\addlegendentry{Traffic};
\end{axis}
\end{tikzpicture}
\end{document}
答案1
您几乎已经搞定了。通常,人们会使用axis x line=middle
将 x 轴置于中间,但为了实现您想要的效果,您“有正确的感觉”将其axis x line=left
与 结合使用,axis x line shift
将其置于 y=0。您使用 也是正确的xticklabel shift
,但不是提供<dimension>
值直接地你可以提供它间接使用xticklabel shift={-\pgfkeysvalueof{/pgfplots/axis x line shift}}
哪个可以满足你的要求(虽然我不知道为什么)。
请注意,我删除了代码中很多不必要的东西,只保留需要更改/添加/调整的必要东西。
% used PGFPlots v1.16
\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\definecolor{c1}{HTML}{004B87} % blue
\pgfplotsset{compat=1.3}
\begin{document}
\begin{tikzpicture}
\pgfplotstableread[col sep=comma]{
date, yoy, qoq
1Q19, 4.5, 1.1
2Q19, 4.5, 1.1
3Q19, 4.5, 1.1
4Q19, 4.5, 1.1
1Q20, -3.7, -8.3
}\hchartone
\small
\begin{axis}[
ybar,
axis lines=left,
ymin=-4.4,
ylabel={Annual change, \%},
enlarge x limits=0.1,
enlarge y limits={0.1, upper},
xtick=data,
xticklabels from table={\hchartone}{date},
axis x line shift={\pgfkeysvalueof{/pgfplots/ymin}}, % <-- adjusted
xticklabel shift={-\pgfkeysvalueof{/pgfplots/axis x line shift}}, % <-- added
nodes near coords,
table/x expr=\coordindex,
]
\addplot table [y=yoy] {\hchartone};
\end{axis}
\end{tikzpicture}
\end{document}