有没有办法导入并自动绘制一列包含文本的图表?
例如这是我的桌子
Period,Unit Sales (in thousands)
Q1 '07,24943
Q2 '07,27855
Q3 '07,32752
Q4 '07,36766
编辑:
这是我尝试过的:
\begin{tikzpicture}
\begin{axis}[
xlabel = Period,
ylabel = Unit Sales (thousands)]
\addplot table [col sep=comma]{data.csv};
\end{axis}
\end{tikzpicture}
答案1
这实际上比看起来要复杂一些:您需要将符号输入转换为数字,然后再转换回来才能进行绘图。例如,以下方法似乎有效:
\documentclass{article}
\usepackage{filecontents}
\begin{filecontents*}{\jobname.csv}
Period,Unit Sales (in thousands)
Q1 '07,24943
Q2 '07,27855
Q3 '07,32752
Q4 '07,36766
\end{filecontents*}
\usepackage{pgfplots}
\newcommand*{\parseperiod}{}
\def\parseperiod Q#1 '#2\relax{\def\pgfmathresult{0.20#2#1}}
\newcommand*{\parseinvperiod}{}
\def\parseinvperiod #1.#2#3#4#5#6#7\relax{\def\pgfmathresult{Q#6 '#4#5}}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
ybar,
x coord trafo/.code = {\expandafter\parseperiod#1\relax},
x coord inv trafo/.code = {\parseinvperiod#1\relax},
xticklabel = {\tick},
xtick = data,
xlabel = Period,
ylabel = Unit Sales (thousands)]
\addplot table [col sep=comma]{\jobname.csv};
\end{axis}
\end{tikzpicture}
\end{document}
这里的想法是解析水平标签并使用低级x coord trafo
键将它们转换为数字。我通过抓取季度和年份,并将它们转换为数字(显示)来实现这一点0.20<year><quarter>
。要实际打印标签,您必须使用将其重新转换为文本x coord inv trafo
。还有一点技巧,只使用X-轴标签为数据本身(xtick = data
)并避免在该点解析任何标签(xticklabel = {\tick}
)。