![使用 pgfplots 绘制翻转条形图](https://linux22.com/image/349049/%E4%BD%BF%E7%94%A8%20pgfplots%20%E7%BB%98%E5%88%B6%E7%BF%BB%E8%BD%AC%E6%9D%A1%E5%BD%A2%E5%9B%BE.png)
我怎样才能制作像这样的图表
从数据来看
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
而不是ybar
和symbolic 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}
如果删除xbar
和fill=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}
有关代码的输出,请参见上文。通过再次删除xbar
和fill=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}