我用pgfplots
它来绘制简单的梳状图。数据中有一些负值。现在所有数据都以相同的颜色绘制。我想用不同的颜色绘制数据中的负值。如何实现?
平均能量损失
\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture} \begin{axis}
\draw[ultra thin] (axis cs:\pgfkeysvalueof{/pgfplots/xmin},0) -- (axis cs:\pgfkeysvalueof{/pgfplots/xmax},0);
\addplot+ [
ycomb,
] coordinates {
(0,3) (1,-2) (2,4) (3,-1) (4,2)
};
\end{axis}
\end{tikzpicture}
\end{document}
答案1
正如土拨鼠在在问题下方评论我还建议将正值和负值分成两个不同的值\addplot
。但为了避免手动区分正值和负值,我会将数据存储在外部文件或加载的表中,然后对其进行一些数学运算。
有关详细信息,请查看代码中的注释。
% used PGFPlots v1.15
\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
% here the variant storing the data in a loaded table
\pgfplotstableread{
x y
0 3
1 -2
2 4
3 -1
4 2
}{\loadedtable}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
% (moved common key here)
ycomb,
]
\draw [ultra thin] (axis cs:\pgfkeysvalueof{/pgfplots/xmin},0)
-- (axis cs:\pgfkeysvalueof{/pgfplots/xmax},0);
% first draw the positive values ...
\addplot+ table [
x=x,
y expr={\thisrow{y} >=0 ? \thisrow{y} : NaN},
] {\loadedtable};
% ... then draw the negative values by using the loaded table
\addplot table [
x=x,
y expr={\thisrow{y} < 0 ? \thisrow{y} : NaN},
] {\loadedtable};
\end{axis}
\end{tikzpicture}
\end{document}