pgfplotstablegetelem 标签中的额外零

pgfplotstablegetelem 标签中的额外零

当尝试回答这个问题时: 如何格式化季度日期并进行注释?Latex 我遇到了一个问题。设置 很容易xtick=data,但由于点数太多,标签会重叠。相反,我希望每二十个点只设置一个标签,如下所示:

xtick distance=20,
xticklabel={\pgfplotstablegetelem{\tick}{date}\of{\datatable}\pgfplotsretval},

这几乎可行,但出于某种原因,会出现很多多余的零\pgfplotstablegetelem{\tick}{date}\of{\datatable}。使用像这样的硬编码数字\pgfplotstablegetelem{20}{date}\of{\datatable}就不会出现这样的问题。

这些零从何而来?如何避免?

\documentclass[tikz, border=1cm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\usepackage{pgfplotstable}
\begin{document}
\pgfplotstableread[col sep=comma]{
date, variable
1990Q1, 12496.47
1990Q2, 8769.965
1990Q3, 16198.83
1990Q4, 11872.27
1991Q1, 8223.55
1991Q2, 10483.81
1991Q3, 6208.322
1991Q4, 7314.133
1992Q1, 12616.9
1992Q2, 7358.835
1992Q3, 6777.611
1992Q4, 13982.37
1993Q1, 13705.72
1993Q2, 10558.9
1993Q3, 15698.88
1993Q4, 11880.08
1994Q1, 9655.853
1994Q2, 9446.236
1994Q3, 12937.13
1994Q4, 8478.318
1995Q1, 11010.07
1995Q2, 9926.974
1995Q3, 8000.667
1995Q4, 11781.52
1996Q1, 10780.95
1996Q2, 11799.2
1996Q3, 9862.246
1996Q4, 8467.397
1997Q1, 8311.305
1997Q2, 11003.56
1997Q3, 8718.845
1997Q4, 6869.106
1998Q1, 13808.13
1998Q2, 9724.482
1998Q3, 14250.31
1998Q4, 9511.105
1999Q1, 11074.92
1999Q2, 13018.25
1999Q3, 5777.769
1999Q4, 7862.549
2000Q1, 5832.333
2000Q2, 5569.941
2000Q3, 13816.67
2000Q4, 11881.05
2001Q1, 22324.51
2001Q2, 13179.21
2001Q3, 25155.95
2001Q4, 23448.18
2002Q1, 22597.36
2002Q2, 17938.45
2002Q3, 14136.45
2002Q4, 27832.88
2003Q1, 25718.62
2003Q2, 34454.82
2003Q3, 23886.34
2003Q4, 12058.21
2004Q1, 16122.31
2004Q2, 9975.339
2004Q3, 14397.81
2004Q4, 13202.73
2005Q1, 11537.9
2005Q2, 11866.98
2005Q3, 20193.73
2005Q4, 12165.63
2006Q1, 11552.83
2006Q2, 8235.158
2006Q3, 11854.69
2006Q4, 9051.431
2007Q1, 13357.51
2007Q2, 18459.61
2007Q3, 21867.71
2007Q4, 13843.68
2008Q1, 13176.87
2008Q2, 18019.05
2008Q3, 14048.15
2008Q4, 13245.42
2009Q1, 21794.11
2009Q2, 18972.07
2009Q3, 14507.25
2009Q4, 18951.79
2010Q1, 19711.91
2010Q2, 21449.03
2010Q3, 19653.44
2010Q4, 14901.64
2011Q1, 13397.83
2011Q2, 14121
2011Q3, 20227.56
2011Q4, 19436.98
2012Q1, 18629.88
2012Q2, 36827.88
2012Q3, 25945.24
2012Q4, 38752.27
2013Q1, 31598.92
2013Q2, 14113.9
2013Q3, 15802.53
2013Q4, 18492.01
2014Q1, 19536.86
2014Q2, 20086.1
2014Q3, 14211.19
2014Q4, 17252.02
2015Q1, 29838.2
2015Q2, 25360.74
2015Q3, 21280.47
2015Q4, 18517.9
2016Q1, 22826.08
2016Q2, 18513.21
2016Q3, 30182.29
2016Q4, 32031.3
2017Q1, 29910.11
2017Q2, 16514.35
2017Q3, 16325.61
2017Q4, 28396.56
2018Q1, 13622.16
2018Q2, 25653.23
2018Q3, 28710.76
2018Q4, 26443.05
2019Q1, 36588.02
2019Q2, 40489.04
2019Q3, 32800.98
2019Q4, 52716.26
2020Q1, 55684.71
2020Q2, 28914.37
2020Q3, 27497.73
2020Q4, 22319.62
2021Q1, 11888.73
2021Q2, 18072.81
}\datatable
\begin{tikzpicture}
\begin{axis}[
enlarge x limits=0.01,
ymin=0, ymax=60000,
axis x line*=bottom,
axis y line*=left,
ylabel={in Points},
x tick label style={rotate=90, anchor=east},
xtick distance=20,
xticklabel={\pgfplotstablegetelem{\tick}{date}\of{\datatable}\pgfplotsretval},
]
\addplot[] table [x expr=\coordindex, y=variable] {\datatable};  
\end{axis}
\end{tikzpicture}
\end{document}

带有额外零的 x 标签的图表

答案1

尝试了几种方法之后,我突然意识到这xtick distance=20并不能构成\tick一个完美的整数。

解决方案可能是

xticklabel={\pgfmathparse{int(\tick)}\pgfplotstablegetelem{\pgfmathresult}{date}\of{\datatable}\pgfplotsretval},

我不知道是否有更好的方法。——我不知道如何pgfplotstablegetelem解析参数以部分处理非整数。

相关内容