
Я строю графики спектральных данных, иногда с логарифмическими осями, а иногда с линейными, но со значениями в дБ. Обычный способ построения таких диаграмм (по крайней мере, в моей области) — все линии начинаются в нижней части графика, несмотря на их значения (отрицательные, положительные). Для логарифмических гребенчатых диаграмм этого можно легко добиться с помощью log origin = infty
. Однако, как я могу использовать что-то подобное для графиков с отрицательными значениями (в линейной шкале)? В настоящее время я смещаю все точки вверх на наименьшее значение, а затем смещаю все метки ytick. Однако это громоздко и не совсем автоматическое решение. Мне приходится вручную находить наименьшее значение, чтобы найти оптимальный сдвиг. Можно ли это улучшить? Я нашелэтот ответ, но это касается логарифмических графиков. Я не очень понимаю код, поэтому не знаю, можно ли его легко модифицировать.
Вот MWE, чего я пытаюсь достичь:
\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}
[
% I'm using this:
yticklabel = {\pgfmathparse{\tick-130}\pgfmathprintnumber{\pgfmathresult}},
y filter/.expression = {y + 130},
ymin = 0
% I would like to have this:
% comb origin = -infty % or something
]
\addplot[ycomb] coordinates {
(1, -6)
(2, -80)
(3, -85)
(4, -120)
(5, -120)
(6, -120)
(7, -120)
(8, -120)
(9, -120)
};
\end{axis}
\end{tikzpicture}
\end{document}
Если я не сделаю этот сдвиг, то результат будет выглядеть так (поскольку все гребни начинаются с y = 0):
решение1
Я думаю, что вы можете использовать одно "очень большое число" в качестве замены бесконечности. Здесь я использую 1000
для значения \verybignumber
. Затем я применяю ваш код с \verybignumber
вместо 130
и позволяю pgfplots
установить ymin
.
\documentclass[border=7pt]{standalone}
\usepackage{pgfplots}
\def\verybignumber{1000}
\begin{document}
\begin{tikzpicture}
\begin{axis}
[
yticklabel = {\pgfmathparse{\tick-\verybignumber}\pgfmathprintnumber{\pgfmathresult}},
y filter/.expression = {\verybignumber+y},
]
\addplot[ycomb] coordinates {
(1, -6)
(2, -80)
(3, -85)
(4, -120)
(5, -120)
(6, -120)
(7, -120)
(8, -120)
(9, -120)
};
\end{axis}
\end{tikzpicture}
\end{document}