我是 pgfplots 的新手,实际上我想创建一些非常基本的东西。昨天,我开始在 pgfplot 手册和 Google 的帮助下修改我的图表,但不幸的是,我还没能做到。
这让我想到以下问题:
我如何添加
- 带有换行符的长描述?
- 水平指导方针
- 在条形图内或上方的百分比是多少?
我还没有那么远,但也许我稍后也需要标准差。如果有人能告诉我如何添加它,那就太好了!
我也尝试过在右侧使用类似单独图例的东西来外包长描述,但我无法实现这一点。
这是我的失败的尝试:
\begin{figure}
\centering
\pgfplotstableread[row sep=\\,col sep=&]{
interval & carT \\
A & 31.1 \\
B & 17.8 \\
C & 44.4 \\
D & 6.7 \\
}\mydata
\begin{tikzpicture}
\begin{axis}[
title=Aus welchen Gründen wurde eLearning in Ihrem Klinikum implementiert?,
ybar,
bar width=30pt,
width=250pt,
ymax=50,
ylabel=Anzahl in \%,
symbolic x coords={A,B,C,D},
xtick=data
]
\addplot table[x=interval,y=carT]{\mydata};
\end{axis}
\end{tikzpicture}
\caption{test}
\end{figure}
我想尝试的另一件事是通过不同的颜色来映射条形图,而不是 A=、B=... 等等...
说实话,pgfplots 可能是一款非常强大的图表创建工具,但在我看来,创建它非常复杂且耗时!也许有人知道创建基本图表的更简单方法?(除了 bchart,功能太少了)
我希望有人能帮助我。
提前感谢!
答案1
1.标签:您可以将描述添加到xticklabels
字段中。您可以在那里输入文本,并使用 添加“正常”换行符\\
。为了使此功能有效,您必须将 的样式更改xticklabel
为例如align=center
(您也可以对“正常”Ti 执行此操作钾如果您想要换行,请使用 Z 节点。您还可以缩小字体,以便一行中可以容纳更多单词:
xticklabel style={align=center,font=\tiny},
xticklabels={{Aufgrund der \\ gesetzlichen \\ Nachweispflicht},
{Einweisung zur \\ Nutzung medizinischer \\ Geräte},
{Zur generellen \\ Weiterbildung},
{Sonstige}},
2.网格线:添加网格线非常简单。如第 330 页所述PGFlots 手册,您可以为所有 3 个轴 (x、y、z) 单独创建主网格和次网格,也可以一起创建:
grid=major, % Major grid on all axes
xminorgrids, % Minor grid only on x axis
...
所以你需要设置
ymajorgrids
3. 百分比值: 如示例 77 所示PGFPlots 画廊,你可以使用
nodes near coords,
nodes near coords align={vertical},
同样,从文档第 114 页,您会发现甚至可以指定格式。默认为\pgfmathprintnumber\pgfplotspointmeta
,打印当前点。要添加,只需在后面%
添加:%
nodes near coords={\pgfmathprintnumber\pgfplotspointmeta \%},
nodes near coords align={vertical},
4.标准差:
您可以添加标准差,如果您还将其添加到表中(例如在名为的列中sd
),然后将以下内容添加到\addplot
:(摘自 PGFPlots 手册,第 293-294 页):
\addplot+[error bars/.cd, y dir=both, y explicit] % (error bars in y directions, up and down = both)
table[x=interval,y=carT, y error=sd]{\mydata};
总结:将所有内容添加到轴选项中,就完成了:
\documentclass[tikz]{standalone}
\usepackage[utf8]{inputenc}
\usepackage{pgfplots}
\begin{document}
\pgfplotstableread[row sep=\\,col sep=&]{
interval & carT & sd\\
A & 31.1 & 3 \\
B & 17.8 & 4.2 \\
C & 44.4 & 1.0\\
D & 6.7 & 0.1 \\
}\mydata
\begin{tikzpicture}
\begin{axis}[
title=Aus welchen Gründen wurde eLearning in Ihrem Klinikum implementiert?,
ybar,
ymajorgrids,
bar width=30pt,
width=250pt,
ymax=50,
ylabel=Anzahl in \%,
symbolic x coords={A,B,C,D},
xtick=data,
xticklabel style={align=center,font=\tiny},
xticklabels={{Aufgrund der \\ gesetzlichen \\ Nachweispflicht},
{Einweisung zur \\ Nutzung medizinischer \\ Geräte},
{Zur generellen \\ Weiterbildung},
{Sonstige}},
nodes near coords={\pgfmathprintnumber\pgfplotspointmeta \%},
nodes near coords align={vertical},
]
\addplot+[error bars/.cd, y dir=both, y explicit] table[x=interval,y=carT, y error=sd]{\mydata};
\end{axis}
\end{tikzpicture}
\end{document}
不同的颜色:如果为每个条形创建一个新的\addplot
,那么它们将以不同的颜色并排绘制。然后您可以轻松指定一个\legend
。由于我对不太熟悉tables
,我使用手动添加了图表coordinates
。也许其他人可以给您提示如何从表格中创建这样的图表。
\documentclass[tikz]{standalone}
\usepackage[utf8]{inputenc}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
title=Aus welchen Gründen wurde eLearning in Ihrem Klinikum implementiert?,
ybar,
ymajorgrids,
bar width=30pt,
width=250pt,
ymax=50,
ylabel=Anzahl in \%,
xticklabels={},
nodes near coords={\pgfmathprintnumber\pgfplotspointmeta \%},
nodes near coords align={vertical},
legend pos=outer north east,
]
\addplot+[error bars/.cd, y dir=both, y explicit] coordinates{ (1,31.1) +- (0,3)};
\addplot+[error bars/.cd, y dir=both, y explicit] coordinates{ (1,17.8) +- (0,5)};
\addplot+[error bars/.cd, y dir=both, y explicit] coordinates{ (1,44.4) +- (0,5)};
\addplot+[error bars/.cd, y dir=both, y explicit] coordinates{ (1,6.7) +- (0,2)};
\legend{{Aufgrund der gesetzlichen Nachweispflicht},
{Einweisung zur Nutzung medizinischer Geräte},
{Zur generellen Weiterbildung},
{Sonstige}}
\end{axis}
\end{tikzpicture}
\end{document}
最后的话:是的,PGFPlots 很复杂,但功能非常强大。使用一段时间后,您会对自己要寻找的内容有很好的感觉,并且可以通过 Google 或 TeX.SE 快速找到相关信息。说实话:我也不得不快速地在 Google 上查询这个问题的答案,但如果您知道自己要寻找什么,那么这个速度非常快。所以在我看来,花时间了解 PGFPlots 是值得的。
如果您有 MATLAB,一种替代方法是使用 Matlab2Tikz 脚本,它将 MATLAB 图形转换为 PGFPlots 图。