![PGFPlots:对数轴和缩放](https://linux22.com/image/266172/PGFPlots%EF%BC%9A%E5%AF%B9%E6%95%B0%E8%BD%B4%E5%92%8C%E7%BC%A9%E6%94%BE.png)
我正在尝试绘制一些 X 轴为对数的数据。数据范围从约 30 微秒到 10 毫秒。如果 x 轴看起来像这样,看起来会更清晰
{0.1 ms, 1 ms, 10 ms}
比
{10^-4 s, 10^-3 s, 10^-2 s}.
换句话说,我希望我的刻度标签以定点形式呈现(即不是指数形式),并按比例缩放(乘以 1000)。
为了达到这个效果,我尝试使用
\documentclass{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{semilogxaxis}
[xmin=1e-6, xmax=1e-3, domain=1e-6:1e-3,
scaled x ticks=real:1e-3,
xtick scale label code/.code={},
log ticks with fixed point]
\addplot {x};
\end{semilogxaxis}
\end{tikzpicture}
\end{document}
但对数轴似乎忽略了“缩放 x 刻度”指令。如能得到任何帮助,我将不胜感激。
谢谢,
答案1
看起来好像你想重新调整 x 坐标没有提取一些共同因素。该scaled x ticks
功能的主要用例是生成一个共同的刻度因子,并将其放入某个节点中……事实上,pgfplots 没有对scaled ticks
和对数轴的内置支持,因为它通常没有用例。
然而,重新调整 x 坐标是一个用例,通过以下方式实现起来非常简单x filter
:
\documentclass{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
xmode=log,
log ticks with fixed point,
% for log axes, x filter operates on LOGS.
% and log(x * 1000) = log(x) + log(1000):
x filter/.code=\pgfmathparse{#1 + 6.90775527898214},
]
\addplot table {
0.0001 10
0.001 20
0.01 15
};
\end{axis}
\end{tikzpicture}
\end{document}
答案2
问题不在于对数轴本身,而在于log ticks with fixed point
忽略scaled x ticks
选项的样式。
这是一个略作修改的版本,它检查缩放是否处于活动状态并将其应用于固定点刻度标签。不过,有一个缺点:如果您使用具有不同缩放比例的对数 y 轴,这将不起作用。我认为如果您能打开一个错误报告为了这。
\documentclass{article}
\usepackage{pgfplots}
\usepgfplotslibrary{units}
\makeatletter
\pgfplotsset{
/pgfplots/log ticks with fixed point/.style={
/pgfplots/log number format basis/.code 2 args={
\begingroup
\edef\pgfplots@exponent{##2}%
\pgfkeysalso{/pgf/fpu}%
% configure the style to avoid crap like
% 10,000.2 or 0.000999937 :
\pgfqkeys{/pgf/number format}{%
fixed relative,
precision=3,
}%
\ifdim##1pt=10pt
\def\pgfplots@baselog{2.30258509299405}%
\else
\pgfmathparse{ln(##1)}%
\let\pgfplots@baselog=\pgfmathresult
\fi
\ifdefined\pgfplots@scaled@ticks@x@arg\pgfmathfloatparsenumber{\pgfplots@scaled@ticks@x@arg}\else\def\pgfmathresult{1}\fi%
\pgfmathparse{\pgfmathresult*exp(\pgfplots@exponent*\pgfplots@baselog)}%
\pgfmathprintnumber[#1]\pgfmathresult
\endgroup
},
}
}
\makeatother
\begin{document}
\begin{tikzpicture}
\begin{axis}[
xmode=log,
log ticks with fixed point,
scaled x ticks=real:1e3
]
\addplot table {
0.0001 10
0.001 20
0.01 15
};
\end{axis}
\end{tikzpicture}
\end{document}