如何定义轴单位中的 xticklabel 偏移?

如何定义轴单位中的 xticklabel 偏移?

我制作了以下图表:

在此处输入图片描述

我在轴选项中已定义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}

该图显示了上述代码的结果

相关内容