我正在创建一个具有两个 x 轴的图表,pgfplots
其中一个轴表示时间步长,另一个轴表示一个时间步内的迭代。到目前为止,我有以下代码:
\begin{tikzpicture}
\begin{axis}[xmin=1, xmax=27,
ymin=300, ymax=450,
xtick={7,12,17,22,27},
xticklabels={1,2,...,5},
x tick label as interval, % <-----
xmajorgrids,
axis x line*=top,
hide y axis,
xlabel={Timestep}
]
\end{axis}
%
\begin{axis}[xmin=1, xmax=27,
ymin=300, ymax=450,
axis x line*=bottom,
xtick={1,2,...,26},
xticklabels= {1,2,3,4,5,6,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5},
xlabel={Newton-Iterations},
ylabel={GMRes-Iterations},
]
\addplot[mark=none, red] table [x index=2,y index=5]
{data};
\addplot[mark=none, blue] table [x index=2,y index=8]
{data};
\end{axis}
\end{tikzpicture}
得到下图的结果:
到目前为止一切顺利。对于我使用的顶部轴x tick label as interval
,但如您所见,它从第二个间隔开始。我可以移动这些标签,以便它们从第一个间隔开始吗?
答案1
使用 时x tick label as interval
,需要有 n+1 个位置xtick
才能放置 n xticklabels
。需要一个额外的位置,因为我们需要标记每个“间隔”的开始和结束。因此,添加第一个标签的开头 ( 1
) 就足够了:
\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.12}
\begin{document}
\begin{tikzpicture}
\begin{axis}[xmin=1, xmax=27,
ymin=300, ymax=450,
xtick={1,7,12,17,22,27},
xticklabels={1,2,...,5},
x tick label as interval, % <-----
xmajorgrids,
axis x line*=top,
hide y axis,
xlabel={Timestep}
]
\end{axis}
%
\begin{axis}[xmin=1, xmax=27,
ymin=300, ymax=450,
axis x line*=bottom,
xtick={1,2,...,26},
xticklabels= {1,2,3,4,5,6,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5},
xlabel={Newton-Iterations},
ylabel={GMRes-Iterations},
]
\addplot[mark=none, red] table [x index=2,y index=5]
{data};
\addplot[mark=none, blue] table [x index=2,y index=8]
{data};
\end{axis}
\end{tikzpicture}
\end{document}
(由于我没有您的数据,因此这会出现错误,但它会根据需要显示轴标签。)