线性梳状图,选择不同于零的原点

线性梳状图,选择不同于零的原点

我正在绘制频谱数据,有时使用对数轴,有时是线性的,但值以 dB 为单位。绘制此类图表的通常方法(至少在我的领域)是让所有线从图表的下部开始,而不管它们的值(负数、正数)。对于对数梳状图,可以使用 轻松实现log origin = infty。但是,对于具有负值(线性刻度)的图,我该如何使用类似的东西?目前,我将所有点向上移动最小值,然后移动所有 yticklabels。但是,这很麻烦,并不是一个真正的自动解决方案。我必须手动找到最小值才能找到最佳移位。可以改进吗?我发现这个答案,但这是关于对数图的。我不太理解代码,所以我不知道这是否可以轻松修改。

以下是我想要实现的 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。然后我应用你的代码 代替\verybignumber130pgfplots设置为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}

在此处输入图片描述

相关内容