带有长文本图例、水平参考线和百分比值的基本条形图

带有长文本图例、水平参考线和百分比值的基本条形图

我是 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 图。

相关内容