我想用具有两个有趣的 x 范围的 pgfplots 绘制数据:
- 0 <= x <= 300
- x 的极限 -> inf (或某个定义的上边界)
因此,为了适当地显示这两个范围,我的想法是单身的绘图具有从 x = 0 到 x = 300 的线性刻度,上方 x 轴具有对数刻度。此外,由于第一个范围(线性刻度)比第二个范围(对数刻度)更重要,因此它应该具有更大的宽度。宽度比为 3:1。
这里是 MWE 和要绘制的数据样本。它生成两个图,一个具有线性刻度,另一个具有对数刻度:
\documentclass[crop, tikz]{standalone}
\usepackage{pgfplots}
\usepackage{filecontents}
\begin{filecontents*}{sample.csv}
1, 2.42
100, 2.54
200, 2.66
300, 2.75
400, 2.81
1000, 2.94
2000, 2.97
3000, 2.98
5000, 2.99
10000, 3.00
\end{filecontents*}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
xlabel=x,
ylabel=y,
xmin = 0,
xmax = 10000,
grid = both],
\addplot[line width=1pt,solid,color=cyan, solid] table[col sep=comma]{sample.csv};
\end{axis}
\end{tikzpicture}
\begin{tikzpicture}
\begin{semilogxaxis}[
xlabel=x,
ylabel=y,
xmin = 0,
xmax = 10000,
grid = both],
\addplot[line width=1pt,solid,color=cyan, solid] table[col sep=comma]{sample.csv};
\end{semilogxaxis}
\end{tikzpicture}
\end{document}
答案1
感觉有点糟糕,但使用 groupplots 可以将两个图以不同的比例并排对齐。使用该选项,horizontal sep = 0
同时注意使用axis y line* = left
/的 y 轴axis y line* = right
,可以平滑过渡到第二个图。
\documentclass[crop, tikz]{standalone}
\usepackage{pgfplots}
\usepackage{filecontents}
\usepgfplotslibrary{groupplots}
\begin{filecontents*}{sample.csv}
1, 2.42
100, 2.54
200, 2.66
300, 2.75
400, 2.81
1000, 2.94
2000, 2.97
3000, 2.98
5000, 2.99
10000, 3.00
\end{filecontents*}
\begin{document}
\begin{tikzpicture}
\begin{groupplot}[group style = {
group size = 2 by 1,
horizontal sep = 0},
width = \linewidth,
tick label style={font=\footnotesize},
typeset ticklabels with strut,
enlarge x limits=false]
\nextgroupplot[
xmin = 0, xmax = 300,
ymin = 2.4, ymax = 3.1,
width = 0.75\linewidth, height = 0.75\linewidth,
axis y line* = left,
grid = both]
\addplot[line width = 1pt, solid, color = cyan] table[col sep = comma] {sample.csv};
\nextgroupplot[
xmin = 300, xmax = 10000,
ymin = 2.4, ymax = 3.1,
width = 0.25\linewidth, height = 0.75\linewidth,
xmode = log,
axis y line* = right,
grid = both,
xtick = {1000, 10000}, yticklabels = {,,}]
\addplot[line width = 1pt, solid, color = cyan] table[col sep = comma] {sample.csv};
\end{groupplot}
\end{tikzpicture}
\end{document}