从 cvs 创建图表:将数字的缩写视为单个数字

从 cvs 创建图表:将数字的缩写视为单个数字

我正在尝试制作一张图表来显示此 MWE 生成的信息:

\documentclass{article}
\usepackage{filecontents}
\begin{filecontents*}{data.csv}
Jahr, Treffer
1995-2010, 4
2005, 3
2006, 7
2007, 15
2008, 68
\end{filecontents*}
\usepackage{array}
\usepackage{csvsimple}    
\usepackage{pgfplots}
\begin{document}
\csvautotabular{data.csv}
\end{document}

相反\csvautotabular{data.csv},我尝试了这个:

\begin{tikzpicture}
  \begin{axis}[
    ybar,
    ]

    \addplot table [x=Jahr, y=Treffer, col sep=comma] {data.csv};
  \end{axis}
\end{tikzpicture}

但出现错误

! Package PGF Math Error: Could not parse input '1995-2010' as a
floating point number, sorry. The unreadable part was near '-2010'..

有没有解决这个问题的好方法,比如将 1995-2010 视为一个字符串并假装它只是另一个年份?

答案1

这个想法来自于这个答案,您可以在其中插入第三列“标签”,.csv以保存标签字符串,并将年份范围的开始作为绘图的 x 值:

\documentclass{article}
\usepackage{filecontents}
\begin{filecontents*}{data.csv}
Jahr, Treffer, Label
1995, 4, 1995-2004
2005, 3, 2005
2006, 7, 2006
2007, 15, 2007
2008, 68, 2008
\end{filecontents*}
\usepackage{array}
\usepackage{csvsimple}    
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\begin{document}
\csvautotabular{data.csv}


\begin{tikzpicture}
  \begin{axis}[
    ybar,
    xtick=data,
    xticklabels from table={data.csv}{Label}
    ]

    \addplot table [x=Jahr, y=Treffer, col sep=comma] {data.csv};
  \end{axis}
\end{tikzpicture}

\end{document}

但是标签很长,而且会重叠,所以给你的情节添加一些化妆品

编辑:我特别喜欢有水平条的想法:

\begin{tikzpicture}
  \begin{axis}[
    xbar,
    ytick=data,
    yticklabels from table={data.csv}{Label}
    ]

    \addplot table [y=Jahr, x=Treffer, col sep=comma] {data.csv};
  \end{axis}
\end{tikzpicture}

相关内容