以对数方式缩放 x 轴

以对数方式缩放 x 轴

虽然我找到了一些等距缩放的答案,但我没有找到能够直接转移到我的问题上的答案。我有一个间隔从 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})。

相关内容