我一直在关注pgfplots 文档制作一些基本的条形图,主要遵循这个例子:
\begin{tikzpicture}
\begin{axis}[
ybar, ymin=0,
width=12cm, height=3.5cm, enlarge x limits=0.5,
ylabel={\#participants},
symbolic x coords={no,yes},
xtick=data,
nodes near coords, nodes near coords align={horizontal},
]
\addplot coordinates {(3,no) (7,yes)};
\end{axis}
\end{tikzpicture}
现在我想在生成的条形图上叠加一条线图,以便创建一个帕累托图(使用线条显示累积数据)。 pgfplots 可以将这两个东西放在同一个轴上吗?
答案1
您可以使用 添加具有不同绘图类型的新绘图\addplot [<plot type>] ...;
。
如果您想在柱状图中添加线图,可以使用\addplot [sharp plot] ...;
。
如果要保持当前颜色循环不中断,请+
在选项前面添加:\addplot +[sharp plot] ...;
要自动计算累计总和,您可以使用 PGFplots 附带的 PGFplotstable 包。它允许您将数据保存到表中,然后可以使用将其输入到 PGFplots \addplot table {<\tablemacro>}
。您可以使用创建表
\pgfplotstableread{
Answer Count
no 7
yes 3
undecided 1
}\results
其中第一个数据行是指定列名的标题,是\results
保存表的宏。要创建包含累积结果的新列,请执行
\pgfplotstableset{
create on use/Cumulated/.style={
create col/expr={
\pgfmathaccuma + \thisrow{Count}
}
}
}
它告诉 PGFplotstable,每当您访问该列Cumulated
(尚不存在)时,它将自动创建一个由\pgfmathaccuma
(最初为空)的总和和的当前值组成的新列Count
。
在你的情节中你只需要说
\addplot [sharp plot] table [y=Cumulated] {\results};
完整代码如下:
\documentclass[11pt]{amsart}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\begin{document}
\pgfplotstableread{
Answer Count
no 7
yes 3
undecided 1
}\results
\pgfplotstableset{
create on use/Cumulated/.style={
create col/expr={
\pgfmathaccuma + \thisrow{Count}
}
}
}
\begin{tikzpicture}
\begin{axis}[
ybar, ymin=0,
ylabel={\#participants},
symbolic x coords={no,yes,undecided},
xtick=data
]
\addplot [fill=gray!30, nodes near coords] table {\results};
\addplot [sharp plot,mark=*] table [y=Cumulated] {\results};
\end{axis}
\end{tikzpicture}
\end{document}