Линейная гребенчатая диаграмма, выбирающая начало координат, отличное от нуля

Линейная гребенчатая диаграмма, выбирающая начало координат, отличное от нуля

Я строю графики спектральных данных, иногда с логарифмическими осями, а иногда с линейными, но со значениями в дБ. Обычный способ построения таких диаграмм (по крайней мере, в моей области) — все линии начинаются в нижней части графика, несмотря на их значения (отрицательные, положительные). Для логарифмических гребенчатых диаграмм этого можно легко добиться с помощью 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}

введите описание изображения здесь

Связанный контент