使用 tikz 或 pgfplots 绘制数据范围

使用 tikz 或 pgfplots 绘制数据范围

我有一个包含国家和数据的样本。我想制作一个“梳状”图来显示每个国家样本涵盖的年份。

我的数据是这样的:

    #########################################################
    country,year
    AUT,1998
    AUT,1999
    AUT,2000
    GER,1999
    GER,2000
    GER,2001
    GER,2002
    FRA,2000
    FRA,2001
    FRA,2002
    FRA,2003
    #########################################################

我想要得到类似的东西:

AUT ---------------
FRA           -------------------
GER      --------------------
    1998|1999|2000|2001|2002|2003    

数据来自另一个软件,我可以对其进行处理,然后再将其传递给 LaTeX。例如:

  • 我可以按国家、年份等进行排序,然后将其传递给 LaTeX。
  • 目前,一些国家年份在数据中重复,但我可以将其压缩为国家年份的唯一出现次数
  • 如果这样更容易操作的话,我还可以创建形式为 [country,minyear,maxyear] 的新数据集pgfplots

我尝试了 MWE,但 addplot 命令当然是假的,并产生错误:

\documentclass{minimal}
\usepackage{filecontents}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.7}
\usepackage{pgfplotstable}

\begin{filecontents}{CountryYears.csv}
    #########################################################
    country,year
    AUT,1998
    AUT,1999
    AUT,2000
    GER,1999
    GER,2000
    GER,2001
    GER,2002
    FRA,2000
    FRA,2001
    FRA,2002
    FRA,2003
    #########################################################
\end{filecontents}

\begin{document}

    \begin{tikzpicture}
        \begin{axis}
             \pgfplotstableread[col sep=comma]{CountryYears.csv}\loadeddata
             \addplot  table[y=year,x=country,ybar] {\loadeddata}; % Plotting the data
        \end{axis}
    \end{tikzpicture}   
\end{document}

答案1

这应该可以帮助你入门。

\documentclass{standalone}
\usepackage{filecontents}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.7}
\usepackage{pgfplotstable}

\begin{filecontents}{CountryYears.csv}
    #########################################################
    country,year
    AUT,1998
    AUT,1999
    AUT,2000
    GER,1999
    GER,2000
    GER,2001
    GER,2002
    FRA,2000
    FRA,2001
    FRA,2002
    FRA,2003
    #########################################################
\end{filecontents}

\begin{document}
\pgfplotstableset{columns/country/.style={string type}}
\pgfplotstableread[col sep=comma]{CountryYears.csv}\loadeddata

\begin{tikzpicture}
\begin{axis}[symbolic y coords={AUT,GER,FRA},ytick=data,
  x tick label style={/pgf/number format/.cd,%
  scaled x ticks = false,
  set thousands separator={},
  fixed},]
\addplot[only marks] table[x=year,y=country] \loadeddata;
\end{axis}
\end{tikzpicture}

\end{document}

演示

如果要连接点,可以在数据点之间添加空行以造成间隙。但是,\pgfplotstableread 会忽略空行。

\documentclass{standalone}
\usepackage{filecontents}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.4}
\usepackage{pgfplotstable}

\begin{filecontents}{CountryYears.csv}
    #########################################################
    country,year
    AUT,1998
    AUT,1999
    AUT,2000

    GER,1999
    GER,2000
    GER,2001
    GER,2002

    FRA,2000
    FRA,2001
    FRA,2002
    FRA,2003
    #########################################################
\end{filecontents}

\begin{document}
\pgfplotstableset{columns/country/.style={string type},col sep=comma}

\begin{tikzpicture}
\begin{axis}[symbolic y coords={AUT,GER,FRA},ytick=data,
  x tick label style={/pgf/number format/.cd,%
  scaled x ticks = false,
  set thousands separator={},
  fixed}]
\addplot table[x=year,y=country] {CountryYears.csv};
\end{axis}
\end{tikzpicture}

\end{document}

将点连接

相关内容