我有一个 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
答案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}