pgfplots:将绘图中的轴缩放比例从线性更改为对数

pgfplots:将绘图中的轴缩放比例从线性更改为对数

我想用具有两个有趣的 x 范围的 pgfplots 绘制数据:

  1. 0 <= x <= 300
  2. 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}

MWE 输出

答案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}

在此处输入图片描述

相关内容