是否可以只改变部分图的 y 缩放比例?

是否可以只改变部分图的 y 缩放比例?

我有一个 tikz 图表,在 2 个轴上有 6 条绘图线。绘图线在 y 轴上都从 100 趋向于 0,刻度分别为 90、80、...、10。

一切看起来都还好,然而数据中最有趣的部分是 10 和 0 之间的部分。由于这部分数据太小,很难正确辨认出它。如果这部分数据比图表的其余部分大一些,图表将更具信息量/可读性。

我可以让整个 y 轴呈对数形式,但对于所讨论的数据集来说,这也不是理想的选择。

有没有办法让图表/图的某个部分比其余部分拉伸得更多。例如,100-90 将是 1 厘米,90-80 将是 1 厘米,依此类推,但 10-0 将是 3 厘米。

请注意,这不是条形图,因此将两个分开的图粘在一起(如“在 Latex 中聚焦图表的某些部分”问题)在这里根本没有帮助。该问题/解决方案也不允许使图的一部分按不同比例缩放,它只允许在图的中间省略一部分 - 我完全不确定为什么有人认为这是一个完全不同的问题的重复...

通过图表进一步解释。 在此处输入图片描述

我想要按照箭头所示拉伸红框内的部分,同时保持其余部分不变。

根据要求提供示例图表标记。

\begin{tikzpicture}[fill=gray]

%Prevent double labelling at origin
\pgfplotsset{ignore zero/.style={%
  #1ticklabel={\ifdim\tick pt=0pt \else\pgfmathprintnumber{\tick}\fi}
}}

\begin{axis}[
  axis y line*=left,
  ymin=0,
  ymax=104,
  xmin=0,
  xmax=9.9,
  xlabel=units of time,
  ylabel=percentage,
  y=1.5cm/15,
  x=1.5cm,
  ignore zero=y,
  ]

\addplot[smooth,mark=*,blue]
  coordinates{
    (0 , 100.000000000000)
    (1 , 21)
    (2 , 1.28)
    (3 , 0.21)
    (4 , 0.03)
    (5 , 0.004)
    (6 , 0.0005)
    (7 , 0.00005)
    (8 , 0.000007)
    (9 , 0.0000008)
  };
\addlegendentry{blue} 

\addplot[smooth,mark=o,green]
  coordinates{
    (0 , 100.000000000000)
    (1 , 2.004965950432)
    (2 , 0.050130282209)
    (3 , 0.001303231721)
    (4 , 0.000034413136)
    (5 , 0.000000916142)
    (6 , 0.000000024509)
    (7 , 0.000000000658)
    (8 , 0.000000000018)
    (9 , 0.000000000000)  
  };
\addlegendentry{green} 

\addplot[smooth,mark=*,red]
  coordinates{
    (0 , 100.000000000000)
    (1 , 30.969834976929)
    (2 , 11.504103027913)
    (3 , 4.422780528370)
    (4 , 1.725299638737)
    (5 , 0.678378118320)
    (6 , 0.268047163678)
    (7 , 0.106264332554)
    (8 , 0.042226956059)
    (9 , 0.016809562633)  
  };
\addlegendentry{red} 

\end{axis}

\end{tikzpicture}

答案1

是的。请参阅手册第 379 页

\pgfplotsset{
    y coord trafo/.code={
        \pgfmathparse{
            #1>10?
                #1+20
            :
                #1*3
        }
    },
    y coord inv trafo/.code={
        \pgfmathparse{
            #1>30?
                #1-20
            :
                #1/3
        }
    }
}

答案2

我不确定这有多大帮助,当然它并不完美,但我认为这大致符合您的要求。问题在于两个轴之间的过渡。即使线条相交,它们也不会完美地连接在一起(放大查看)。

这种方法还需要对所有内容进行两次绘制,我认为这并不理想。

在此处输入图片描述

\documentclass[border=5mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.14}
\usepgfplotslibrary{groupplots}
\begin{document}
\begin{tikzpicture}[fill=gray]

%Prevent double labelling at origin
\pgfplotsset{ignore zero/.style={%
  #1ticklabel={\ifdim\tick pt=0pt \else\pgfmathprintnumber{\tick}\fi}
}}

\begin{groupplot}[
  axis y line*=left,
  xmin=0,
  xmax=9.9,
  xlabel=units of time,
%  y=1.5cm/15,
%  x=1.5cm,
  width=12cm,
  height=5cm,
  ignore zero=y,
  group style={
    group size=1 by 2,
    group name=G,
    vertical sep=0pt,
    x descriptions at=edge bottom
  }
  ]


\nextgroupplot[axis x line=none,ymin=10,ymax=104]
\addplot[smooth,mark=*,blue]
  coordinates{
    (0 , 100.000000000000)
    (1 , 21)
    (2 , 1.28)
    (3 , 0.21)
    (4 , 0.03)
    (5 , 0.004)
    (6 , 0.0005)
    (7 , 0.00005)
    (8 , 0.000007)
    (9 , 0.0000008)
  };
\addlegendentry{blue} 

\addplot[smooth,mark=o,green]
  coordinates{
    (0 , 100.000000000000)
    (1 , 2.004965950432)
    (2 , 0.050130282209)
    (3 , 0.001303231721)
    (4 , 0.000034413136)
    (5 , 0.000000916142)
    (6 , 0.000000024509)
    (7 , 0.000000000658)
    (8 , 0.000000000018)
    (9 , 0.000000000000)  
  };
\addlegendentry{green} 

\addplot[smooth,mark=*,red]
  coordinates{
    (0 , 100.000000000000)
    (1 , 30.969834976929)
    (2 , 11.504103027913)
    (3 , 4.422780528370)
    (4 , 1.725299638737)
    (5 , 0.678378118320)
    (6 , 0.268047163678)
    (7 , 0.106264332554)
    (8 , 0.042226956059)
    (9 , 0.016809562633)  
  };
\addlegendentry{red} 

\nextgroupplot[ymin=0,ymax=10,axis x line=left]
\addplot[smooth,mark=*,blue]
  coordinates{
    (0 , 100.000000000000)
    (1 , 21)
    (2 , 1.28)
    (3 , 0.21)
    (4 , 0.03)
    (5 , 0.004)
    (6 , 0.0005)
    (7 , 0.00005)
    (8 , 0.000007)
    (9 , 0.0000008)
  };


\addplot[smooth,mark=o,green]
  coordinates{
    (0 , 100.000000000000)
    (1 , 2.004965950432)
    (2 , 0.050130282209)
    (3 , 0.001303231721)
    (4 , 0.000034413136)
    (5 , 0.000000916142)
    (6 , 0.000000024509)
    (7 , 0.000000000658)
    (8 , 0.000000000018)
    (9 , 0.000000000000)  
  };


\addplot[smooth,mark=*,red]
  coordinates{
    (0 , 100.000000000000)
    (1 , 30.969834976929)
    (2 , 11.504103027913)
    (3 , 4.422780528370)
    (4 , 1.725299638737)
    (5 , 0.678378118320)
    (6 , 0.268047163678)
    (7 , 0.106264332554)
    (8 , 0.042226956059)
    (9 , 0.016809562633)  
  };


\end{groupplot}
\node [left=1cm,anchor=center,rotate=90] at (G c1r1.south west) {percentage};
\end{tikzpicture}
\end{document}

相关内容