我有一张图像,想在 pgfplots 中重新创建。我们有一个loglogaxis
图,想在其中添加一组额外的轴,以显示这些值在简单转换下对应的内容。在这个网站上,我找到了一个关于如何添加第二个轴的解决方案,我已经将刻度对齐,但我需要一些关于如何转换第二个轴上的刻度线的建议。
MWE 如下
在右侧的 y 轴上,我希望将左侧轴上的数字除以某个数字,例如 7.5e15。如果我手动使用
yticks=
它,这些数字将不再与 x 轴上的数字对齐(我还需要具有不同因子的横轴,目前不是那么重要)
顺便说一句:我不介意手动输入刻度标签,它们应该放在与左侧 y 轴相同的位置
附加问题:
- 我
loglogaxis
怎样才能得到 0.1、1、10 等而不是10^-1
等 - 指定通用设置的最佳方法是什么?在这里我必须在两个环境中
width
设置height
loglogaxis
梅威瑟:
\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
提供了他们想要的内容。width
并height
给予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}