pgfplots:loglogaxis 双轴刻度变换

pgfplots:loglogaxis 双轴刻度变换

我有一张图像,想在 pgfplots 中重新创建。我们有一个loglogaxis图,想在其中添加一组额外的轴,以显示这些值在简单转换下对应的内容。在这个网站上,我找到了一个关于如何添加第二个轴的解决方案,我已经将刻度对齐,但我需要一些关于如何转换第二个轴上的刻度线的建议。

MWE 如下

  1. 在右侧的 y 轴上,我希望将左侧轴上的数字除以某个数字,例如 7.5e15。如果我手动使用yticks=它,这些数字将不再与 x 轴上的数字对齐

    (我还需要具有不同因子的横轴,目前不是那么重要)

    顺便说一句:我不介意手动输入刻度标签,它们应该放在与左侧 y 轴相同的位置

附加问题:

  1. loglogaxis怎样才能得到 0.1、1、10 等而不是10^-1
  2. 指定通用设置的最佳方法是什么?在这里我必须在两个环境中width设置heightloglogaxis

梅威瑟:

\documentclass{standalone}
\usepackage[svgnames,dvipsnames]{xcolor}
\usepackage{pgfplots}
\pgfplotsset{compat=1.13} 
\begin{document}

\begin{tikzpicture}
  \begin{loglogaxis}[
    xmin=0.4*1e6,
    xmax=1.2*1e9,
    ymin=1e12,
    ymax=5e18,
    width=12cm,
    height=9cm,
    unit vector ratio*=,
    ]
  \end{loglogaxis}
  \begin{loglogaxis}[
    axis y line*=right,
    axis x line*=top,
    xmin=0.4*1e-1,
    xmax=1.2*1e2, 
    ymin=1e-4, 
    ymax=5*1e2,
    width=12cm,
    height=9cm,
    unit vector ratio*=,
    ]
  \end{loglogaxis}
\end{tikzpicture}
\end{document}

在此处输入图片描述


更新:对于那些感兴趣的人,我使用了符号 1 的出色解决方案,以使轴成为其中之一:

 \begin{loglogaxis}[
    axis x line*=none,xmajorticks=false,
    axis y line*=right,
    log number format basis/.code 2 args={
      % #1 = base, #2=  exponent   
      \pgfmathparse{(1/9.46)*10^(#2-15)}
      \pgfmathprintnumber[/pgf/number format/.cd,fixed,precision=3,fixed zerofill,]\pgfmathresult
    },
    ylabel={Some text},
  ]
  \end{loglogaxis}

答案1

环境loglogaxis(通常是对数轴)用于排版刻度log number format basis/.code 2 args。这是您可以玩的关键。

在以下示例中

  • 右轴和顶轴被分开处理,以便可以定义不同的log number format basis
  • 对于右轴,目前为$\frac{#1^{\pgfmathprintnumber{#2}}}{7.5\times10^{15}}$。您可以在此处插入一些必要的计算。(例如\pgfmathparse{1/7.5}\pgfmathparse{#2-16}
  • 对于上轴,它目前是一个 if 语句。这表明可以将 10^{-1}、10^0、10^1 逐个替换为 .1、1、10。不过,人们可能会检查是否\pgfmathprintnumber提供了他们想要的内容。

  • widthheight给予every axis

\begin{tikzpicture}[/pgfplots/every axis/.style={
    xmin=0.4*1e6,
    xmax=1.2*1e9,
    ymin=1e12,
    ymax=5e18,
    width=12cm,
    height=9cm}]
  \begin{loglogaxis}
  \end{loglogaxis}
  \begin{loglogaxis}[
    axis x line*=none,xmajorticks=false,
    axis y line*=right,
    log number format basis/.code 2 args={
      $\frac{#1^{\pgfmathprintnumber{#2}}}{7.5\times10^{15}}$
    }
  ]
  \end{loglogaxis}
  \begin{loglogaxis}[
    axis x line*=top,
    axis y line*=none,ymajorticks=false,
    log number format basis/.code 2 args={
      \ifdim #2 pt=7pt
        \parbox{2cm}{\centering ten \\ to \\ the \\ seventh \\ power}
      \else
        $#1^{\pgfmathprintnumber{#2}}$
      \fi
    }
  ]
  \end{loglogaxis}
\end{tikzpicture}

\end{document}

相关内容