Я пытаюсь построить график данных, где ось X логарифмическая. Данные варьируются от ~30 микросекунд до 10 миллисекунд. Выглядит намного чище, когда крестики выглядят как
{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}