![如何在此 pgfplots 示例中正确放置 xtick 标签而不丢失任何内容?](https://linux22.com/image/418665/%E5%A6%82%E4%BD%95%E5%9C%A8%E6%AD%A4%20pgfplots%20%E7%A4%BA%E4%BE%8B%E4%B8%AD%E6%AD%A3%E7%A1%AE%E6%94%BE%E7%BD%AE%20xtick%20%E6%A0%87%E7%AD%BE%E8%80%8C%E4%B8%8D%E4%B8%A2%E5%A4%B1%E4%BB%BB%E4%BD%95%E5%86%85%E5%AE%B9%EF%BC%9F.png)
在以下 pgfplots 条形图代码中,我使用显式 xticklabels,因为我想要简单的整数标签,而不是指数或从它们派生的不太正确的整数。但这意味着我还需要指定或调整 xtick 标签的位置。使用 xshift 几乎解决了这个问题,但不知何故它丢失了第一个刻度标签 --- 它应该是第一组 3 个条形下的 10。有什么好的办法可以解决这个问题?
\documentclass[a4paper]{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\begin{document}
\begin{tikzpicture}
\begin{semilogxaxis}[
log basis x=4,
width=10cm,
xlabel=size of input expressions,
xticklabels={10,40,160,640,2560},
x tick label style={xshift=2.5cm},
xmin=5, xmax=5120,
ylabel=geo. mean (output-size / input-size),
yticklabel=\pgfmathprintnumber{\tick}\%,
enlargelimits=0.05,
ybar,
]
\addplot
coordinates {(10,75.16) (40,76.38)
(160,76.91) (640,77.35) (2560,77.41)};
\addplot
coordinates {(10,65.35) (40,59.68)
(160,56.85) (640,57.50) (2560,57.01)};
\addplot
coordinates {(10,52.48) (40,23.40)
(160,6.09) (640,1.64) (2560,0.37)};
\legend{std.,fuse,lift}
\end{semilogxaxis}
\end{tikzpicture}
\end{document}
答案1
您实际上只需要指定想要刻度的位置的 x 值。由于所有五个组都显示在第一个中\addplot
,因此您只需添加xtick=data
到axis
选项,然后删除xshift
标签即可。
如果您想删除蜱虫,您可以这样做x tick style={/pgfplots/tickwidth=0}
。
\documentclass[a4paper]{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\begin{document}
\begin{tikzpicture}
\begin{semilogxaxis}[
log basis x=4,
width=10cm,
xlabel=size of input expressions,
xticklabels={10,40,160,640,2560},
xmin=5, xmax=5120,
ylabel=geo. mean (output-size / input-size),
yticklabel=\pgfmathprintnumber{\tick}\%,
enlargelimits=0.05,
ybar,
xtick=data,
x tick style={/pgfplots/tickwidth=0}
]
\addplot
coordinates {(10,75.16) (40,76.38)
(160,76.91) (640,77.35) (2560,77.41)};
\addplot
coordinates {(10,65.35) (40,59.68)
(160,56.85) (640,57.50) (2560,57.01)};
\addplot
coordinates {(10,52.48) (40,23.40)
(160,6.09) (640,1.64) (2560,0.37)};
\legend{std.,fuse,lift}
\end{semilogxaxis}
\end{tikzpicture}
\end{document}