这个问题源于我问过的同一个问题这里。
现在,我需要很多数据点来给每个数据点都加上一个刻度标签。对于一个轴(底部的轴),我可以实现我想要的效果。但是对于另一个轴,我遇到了问题,我认为这是由于我使用了x tick label as interval
。以下是我所拥有的:
\documentclass{minimal}
\usepackage{pgfplotstable,pgfplots}
\pgfplotsset{compat=newest}
\pgfplotstableread{
1 1 440 440
2 2 407 424
3 3 395 426
4 4 382 427
5 5 375 427
6 6 366 427
1 7 391 423
2 8 378 395
3 9 376 396
4 10 366 396
5 11 357 396
1 12 339 389
2 13 333 372
3 14 317 372
4 15 298 372
5 16 279 372
1 17 253 368
2 18 248 352
3 19 236 351
4 20 167 351
5 21 166 351
1 22 158 347
2 23 120 319
3 24 115 319
4 25 109 319
5 26 108 319
1 27 105 314
2 28 115 293
3 29 108 293
4 30 108 292
5 31 103 293
1 32 102 289
2 33 108 268
3 34 100 268
4 35 98 270
5 36 99 269
1 37 94 266
2 38 102 250
3 39 92 250
4 40 95 251
5 41 93 251
1 42 91 249
2 43 96 236
3 44 93 237
4 45 89 238
5 46 85 241
1 47 85 237
2 48 93 233
3 49 85 232
4 50 87 232
5 51 84 232
1 52 85 232
}\data
\begin{document}
\begin{tikzpicture}
\begin{axis}[xmin=1, xmax=52,
ymin=0, ymax=450,
xtick={1,7,12,17,22,...,52},
minor x tick num=2,
xticklabels={1,2,...,10},
x tick label as interval,
xmajorgrids,
axis x line*=top,
hide y axis,
xlabel={Timestep}
]
\end{axis}
%
\begin{axis}[xmin=1, xmax=52,
ymin=0, ymax=450,
axis x line*=bottom,
xtick={1,6,11,16,21,...,52},
minor x tick num=4,
xticklabels= {1,6,5,5,5,5,5,5,5,5,5},
xlabel={Newton-Iterations},
ylabel={GMRes-Iterations},
]
\addplot[mark=none, red] table [x index=1,y index=2]
{\data};
\addplot[mark=none, blue] table [x index=1,y index=3]
{\data};
\end{axis}
\end{tikzpicture}
\end{document}
其结果是:
对于图形顶部的 x 刻度,我想显示每个第二个标签(这只是一个例子,我的原始数据大约有 50 个时间步长)。我尝试了等等,minor x tick num
但我无法得到我想要的结果。
请注意,第一个时间步比其他时间步多一次牛顿迭代。
答案1
您可以使用xticklabel
:xticklabels
xticklabel={\pgfmathparse{mod(\ticknum+1,2)==0?int(\ticknum+1):}\pgfmathresult}
代码:
\documentclass[margin=5pt]{standalone}
\usepackage{pgfplotstable,pgfplots}
\pgfplotsset{compat=newest}
\pgfplotstableread{
1 1 440 440
2 2 407 424
3 3 395 426
4 4 382 427
5 5 375 427
6 6 366 427
1 7 391 423
2 8 378 395
3 9 376 396
4 10 366 396
5 11 357 396
1 12 339 389
2 13 333 372
3 14 317 372
4 15 298 372
5 16 279 372
1 17 253 368
2 18 248 352
3 19 236 351
4 20 167 351
5 21 166 351
1 22 158 347
2 23 120 319
3 24 115 319
4 25 109 319
5 26 108 319
1 27 105 314
2 28 115 293
3 29 108 293
4 30 108 292
5 31 103 293
1 32 102 289
2 33 108 268
3 34 100 268
4 35 98 270
5 36 99 269
1 37 94 266
2 38 102 250
3 39 92 250
4 40 95 251
5 41 93 251
1 42 91 249
2 43 96 236
3 44 93 237
4 45 89 238
5 46 85 241
1 47 85 237
2 48 93 233
3 49 85 232
4 50 87 232
5 51 84 232
1 52 85 232
}\data
\begin{document}
\begin{tikzpicture}
\begin{axis}[xmin=1, xmax=52,
ymin=0, ymax=450,
xtick={1,7,12,17,22,...,52},
minor x tick num=2,
xticklabel={\pgfmathparse{mod(\ticknum+1,2)==0?int(\ticknum+1):}\pgfmathresult},
x tick label as interval,
xmajorgrids,
axis x line*=top,
hide y axis,
xlabel={Timestep}
]
\end{axis}
%
\begin{axis}[xmin=1, xmax=52,
ymin=0, ymax=450,
axis x line*=bottom,
xtick={1,6,11,16,21,...,52},
minor x tick num=4,
xticklabels= {1,6,5,5,5,5,5,5,5,5,5},
xlabel={Newton-Iterations},
ylabel={GMRes-Iterations},
]
\addplot[mark=none, red] table [x index=1,y index=2]
{\data};
\addplot[mark=none, blue] table [x index=1,y index=3]
{\data};
\end{axis}
\end{tikzpicture}
\end{document}