我正在绘制频谱数据,有时使用对数轴,有时是线性的,但值以 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}
答案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}