使用 pgfplots 绘制翻转条形图

使用 pgfplots 绘制翻转条形图

我怎样才能制作像这样的图表

在此处输入图片描述

从数据来看

String, Value
======
Some text, 1.9
Another text, 3.1
Yet another text, 0.9

所以它就像一个条形图,但是带有一条线。

我猜是这样的

\documentclass{article}
\usepackage{pgfplots}

\begin{document}
\begin{tikzpicture}
\begin{axis}[
    symbolic x coords={a small bar,a medium bar,a large bar},xtick=data]
    \addplot[ybar,fill=blue] coordinates {
        (a small bar,42)
        (a medium bar,50)
        (a large bar,80)
    };
\end{axis}
\end{tikzpicture}
\end{document}

产生

在此处输入图片描述

但我不知道如何翻转它,以便文本标签在左边而不是下面,并且我还想用每隔一行的背景颜色或水平线来“分隔”行,就像我在示例中绘​​制的那样。

答案1

您必须使用xbar而不是ybarsymbolic y coordinates而不是来交换 x 轴和 y 轴symbolic x coordinates。此外,您必须在代码中明确或在处理数据对时隐式地交换数据对中的 x 和 y 分量。

明确交换组件

\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}
  [symbolic y coords={a small bar,a medium bar,a large bar},
   ytick=data,
   xbar,
   y=0.7cm,
   enlarge y limits={abs=0.5cm},
  ]
  \addplot[fill=blue] coordinates
    {(42,a small bar)
     (50,a medium bar)
     (80,a large bar)
    };
\end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

如果删除xbarfill=blue,那么您会得到一个普通的情节。

\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}
  [symbolic y coords={Some text,Another text,Yet another text},
   ytick=data,
   y=0.7cm,
   enlarge y limits={abs=0.5cm},
  ]
  \addplot coordinates
    {(1.9,Some text)
     (3.1,Another text)
     (0.9,Yet another text)
    };
\end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

隐式交换组件(灵感来自在数据生成的图上交换 x 轴和 y 轴

\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}
  [symbolic y coords={a small bar,a medium bar,a large bar},
   ytick=data,
   xbar,
   y=0.7cm,
   enlarge y limits={abs=0.5cm},
  ]
  \addplot[fill=blue] plot table
    [ignore chars={(,)}, col sep=comma, x index=1, y index=0, header=false]
    {(a small bar,42)
     (a medium bar,50)
     (a large bar,80)
    };
\end{axis}
\end{tikzpicture}
\end{document}

有关代码的输出,请参见上文。通过再次删除xbarfill=blue,您将获得一个普通的图。

\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}
  [symbolic y coords={Some text,Another text,Yet another text},
   ytick=data,
   y=0.7cm,
   enlarge y limits={abs=0.5cm},
  ]
  \addplot plot table
    [ignore chars={(,)}, col sep=comma, x index=1, y index=0, header=false]
    {(Some text,1.9)
     (Another text,3.1)
     (Yet another text,0.9)
    };
\end{axis}
\end{tikzpicture}
\end{document}

相关内容