我正在尝试重新创建下图中的图。我最初的想法是将四个不同比例的间隔绘制为单独的图,并将它们无缝对齐。
是否有更优雅的解决方案,允许单独缩放 x 轴上的间隔?
编辑:根据@Rmano 提供的见解,我能够(经过大量调整)获得所需的结果。请参阅下面的代码和输出。
\pgfplotsset{
x coord trafo/.code={
\pgfmathparse{
#1<=4?
#1*50
:%trekke fra 16
(#1<30?
#1*10+160
:
(#1<150?
#1*2+400
:
#1*0.5+625
)
)
}
},
x coord inv trafo/.code={
\pgfmathparse{
#1<200?
#1/50
:
(#1<460?
(#1-160)/10
:
(#1<640?
(#1-400)/2
:
(#1-625)/0.5
)
)
}
}
}
答案1
找到了!这是手册的相关部分;我的磁盘中有一个例子,源自是否可以只改变部分图的 y 缩放比例?:
%%% https://tex.stackexchange.com/questions/359878/is-it-possible-to-alter-the-y-scaling-for-only-part-of-a-plot
\documentclass[border=10pt]{standalone}
\usepackage{tikz}
\usepackage{pgfplots}\pgfplotsset{compat=1.13}
\usetikzlibrary{arrows.meta,positioning,calc}
\begin{document}
\begin{tikzpicture}[fill=gray]
\pgfplotsset{
y coord trafo/.code={
\pgfmathparse{
#1>10?
#1+20
:
#1*3
}
},
y coord inv trafo/.code={
\pgfmathparse{
#1>30?
#1-20
:
#1/3
}
}
}
% thanks to Paul Gessler https://tex.stackexchange.com/a/235629/38080
%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,
]
\fill[gray!20] (0,0) rectangle (10,10);
\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}
\addplot [purple, domain=0:8] {10*x};
\addlegendentry{straight}
\draw[ultra thick, white] (0,10) -- (10, 10);
\end{axis}
\end{tikzpicture}
\end{document}
我认为它可以应用于您的情况(使用相应的x trafo...
样式。