虽然我找到了一些等距缩放的答案,但我没有找到能够直接转移到我的问题上的答案。我有一个间隔从 10^-8 到 3*10^-8 ,一个从 3*10^-8 到 8*10^-6 ,一个从 8*10^-6 到 0.25 。如果所有区域的大小大致相同,那就太好了。任何帮助都非常感谢。(感谢 marmot 到目前为止的帮助。)我认为正确的命令已经存在 \xbarrier 和 xcoord trafo,但老实说,即使阅读了手册,我也不知道如何正确使用它们。
\documentclass[letter,12pt,twoside]{article}
\usepackage{tikz}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\usepackage{mathptmx}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage{mathptmx}
\usetikzlibrary{pgfplots.groupplots}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}[
labelnode/.style={font=\footnotesize, above},
labelline/.style={stealth-stealth,shorten >=0.1pt, shorten <=0.5pt}
]
\def\xBarrier{10}
\begin{axis}[
axis lines = left,
xlabel = $\beta$,
ylabel = {$E[\pi_B^D]$},
width=16cm,
height=6cm ]
x coord trafo/.code={%
\pgfkeys{/pgf/fpu}%
\pgfmathparse{#1 < \xBarrier ? #1 : (\xBarrier - ln(\xBarrier) +ln(#1))}},
xtick={log10(#1^9),log10(#1^8),log10(#1^7),log10(#1^5),1e(-5),1e(-2),0.2},
xticklabel={%
\pgfkeys{/pgf/fpu}%
\pgfmathparse{\tick < \xBarrier ? \tick :
(\tick + ln(10)-10)/ln(10)
}%
\ifpgfmathfloatcomparison
\pgfmathprintnumber\tick
\else
$10^{\pgfmathprintnumber\pgfmathresult}$%
\fi
\pgfkeys{/pgf/fpu=false}%
}]
\addplot [
domain=1.*10^(-8) : 3.04985*10^(-8),
samples=100,
color=red ] {10-4.16667 + 5* 2^(8/9)* (1/x)^(1/9)} ;
\addplot [
domain=3.04985*10^(-8) : 8.24002*10^(-6),
samples=100,
color=red ] {10 + (10 * (1/x)^(1/9))/3^(1/9)};
\addplot [
domain=8.24002*10^(-6) : 0.25,
samples=100,
color=red ] {10+ 2.5 + 5 * 2^(7/9)* (1/x)^(1/9)};
\coordinate (l) at (rel axis cs:0,1);
\end{axis}
\end{tikzpicture}
\end{document}
提前致谢。
答案1
正如我在评论中提到的,我认为选择单一连续坐标变换可能是更好的选择。正如你在这里看到的,
\documentclass[letter,12pt,twoside]{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\begin{document}
\begin{tikzpicture}[
labelnode/.style={font=\footnotesize, above},
labelline/.style={stealth-stealth,shorten >=0.1pt, shorten <=0.5pt}
]
\begin{axis}[
axis lines = left,
xlabel = $\beta$,
ylabel = {$E[\pi_B^D]$},
width=16cm,
height=6cm,
x coord trafo/.code={%
\pgfkeys{/pgf/fpu}%
\pgfmathparse{sign(log10(#1))*pow(abs(log10(#1)),5/3)}
},
x inverse coord trafo/.code={%
\pgfkeys{/pgf/fpu}%
\pgfmathparse{10^(-pow(abs(#1),3/5))}
},
xtick={1.18*10^(-9),5*10^(-8),1*10^(-8),1*10^(-7),1*10^(-5),1*10^(-2),0.2},
xticklabel={%
\pgfkeys{/pgf/fpu}%
\pgfmathparse{10^(-pow(abs(\tick),3/5))}%
$\pgfmathprintnumber\pgfmathresult$%
\pgfkeys{/pgf/fpu=false}%
},
]
\addplot [
domain=1.18*10^(-9) : 3.04985*10^(-8),
samples=100,
color=red ] {100-4.16667 + 5* 2^(8/9)* (1/x)^(1/9)} ;
\addplot [
domain=3.04985*10^(-8) : 8.24002*10^(-6),
samples=100,
color=red ] {100 + (10 * (1/x)^(1/9))/3^(1/9)};
\addplot [
domain=8.24002*10^(-6) : 0.25,
samples=100,
color=red ] {100+ 2.5 + 5 * 2^(7/9)* (1/x)^(1/9)};
\coordinate (l) at (rel axis cs:0,1);
\path (1.8*10^-9, 0 |- l) coordinate (aux1)
(3.04985*10^-8, 0 |- l) coordinate (aux2)
(8.24002*10^-6, 0 |- l) coordinate (aux3)
(0.25, 0 |- l) coordinate (aux4);
\draw[dashed] (3.04985*10^-8, 100) -- (3.04985*10^-8,200);
\draw[dashed] (8.24002*10^-6, 100) -- (8.24002*10^-6,200);
\end{axis}
\draw [labelline] (aux1) -- node[labelnode]{$n^D=2$} (aux2);
\draw [labelline] (aux2) -- node[labelnode]{$n^D=3$} (aux3);
\draw [labelline] (aux3) -- node[labelnode]{$n^D=4$} (aux4);
\end{tikzpicture}
\end{document}
这三个间隔被映射到长度相当的间隔。这个图似乎也表明这个图并不完全连续,但我没有背景信息可以让我判断这是否是一个问题,或者是某种数值不稳定性。
请注意,我能够从你的序言中删除所有内容,但是\usepackage{pgfplots}
(我还添加了\pgfplotsset{compat=1.16}
)。