【问题标题】:pie chart from csv file in LaTeX and pgf-pie来自 LaTeX 和 pgf-pie 中 csv 文件的饼图
【发布时间】:2021-10-22 19:14:50
【问题描述】:

我正在尝试使用 pgf-pie 从 csv 文件中绘制饼图。它必须是 pdf-pie,因为 datapie 在 Debian 11 下对我不起作用。它在 Debian 10 下确实有效。所以我正在尝试 pgf-pie,但我对其他软件包的其他解决方案不感兴趣。

\documentclass{article}

\usepackage{csvsimple}
\usepackage{pgf-pie}

\begin{document}
\begin{filecontents*}{fruit.csv}
Name,Quantity
"Apples",30
"Pears",25
"Lemons,Limes",40.5
"Peaches",34.5
"Cherries",20
\end{filecontents*}
\csvreader[]{fruit.csv}{Name = \Name, Quantity = \Quantity}{\Quantity/\Name,}

\begin{tikzpicture}
    \pie[polar, explode=0.1]{
        \csvreader[]{fruit.csv}{Name = \Name, Quantity = \Quantity}{\Quantity/\Name,}
    }
\end{tikzpicture}

\end{document}

第一个 \csvreader 打印

30/”Apples”,25/”Pears”,34.5/”Peaches”,20/”Cherries”,

但这是错误的,因为它不打印 40.5/"Lemons,Limes"。

第二个 \csvreader 永远挂起 pdflatex 并显示此错误消息:

! Use of \csv@reader doesn't match its definition.
\@ifnextchar ...eserved@d =#1\def \reserved@a {#2}
                                                  \def \reserved@b {#3}\futu...
l.2091  }

为什么这不起作用?

【问题讨论】:

    标签: csv latex pdflatex tikz pgf


    【解决方案1】:

    对于第一部分的问题是,通常用作csv文件中的分隔符,因此您需要在组内保护它:

    \documentclass{article}
    
    \usepackage{csvsimple}
    \usepackage{pgf-pie}
    
    \begin{filecontents*}[overwrite]{fruit.csv}
    Name,Quantity
    "Apples",30
    "Pears",25
    "Lemons{,}Limes",40.5
    "Peaches",34.5
    "Cherries",20
    \end{filecontents*}
    
    \begin{document}
    
    \csvreader[]{fruit.csv}{Name = \Name, Quantity = \Quantity}{\Quantity/\Name,}
    
    
    \end{document}
    

    或者你可以使用另一个分隔符来避免冲突:

    \documentclass{article}
    
    \usepackage{csvsimple}
    \usepackage{pgf-pie}
    
    \begin{filecontents*}[overwrite]{fruit.csv}
    Name;Quantity
    "Apples";30
    "Pears";25
    "Lemons,Limes";40.5
    "Peaches";34.5
    "Cherries";20
    \end{filecontents*}
    
    \begin{document}
    
    \csvreader[separator=semicolon]{fruit.csv}{Name = \Name, Quantity = \Quantity}{\Quantity/\Name,}
    
    
    \end{document}
    

    对于饼图问题,您实际上并不需要 pgf-pie 包。相反,您可以使用 csvsimple 文档中的示例:

    \documentclass{article}
    
    \usepackage{csvsimple}
    \usepackage{pgf-pie}
    
    \begin{filecontents*}[overwrite]{fruit.csv}
    Name,Quantity
    "Apples",30
    "Pears",25
    "Lemons{,}Limes",40.5
    "Peaches",34.5
    "Cherries",20
    \end{filecontents*}
    
    \begin{document}
    
    % From the csvsimple doc:
    
    % This example needs the packages tikz, xcolor, calc
    \definecolorseries{myseries}{rgb}{step}[rgb]{.95,.85,.55}{.17,.47,.37}
    \resetcolorseries{myseries}%
    
    % a pie slice
    \newcommand{\slice}[4]{
      \pgfmathsetmacro{\midangle}{0.5*#1+0.5*#2}
      \begin{scope}
        \clip (0,0) -- (#1:1) arc (#1:#2:1) -- cycle;
        \colorlet{SliceColor}{myseries!!+}%
        \fill[inner color=SliceColor!30,outer color=SliceColor!60] (0,0) circle (1cm);
      \end{scope}
      \draw[thick] (0,0) -- (#1:1) arc (#1:#2:1) -- cycle;
      \node[label=\midangle:#4] at (\midangle:1) {};
      \pgfmathsetmacro{\temp}{min((#2-#1-10)/110*(-0.3),0)}
      \pgfmathsetmacro{\innerpos}{max(\temp,-0.5) + 0.8}
      \node at (\midangle:\innerpos) {#3};
    }
    
    % sum of amounts
    \csvreader[before reading=\def\mysum{0}]{fruit.csv}{Quantity=\Quantity}{%
      \pgfmathsetmacro{\mysum}{\mysum+\Quantity}%
    }
    
    % drawing of the pie chart
    \begin{tikzpicture}[scale=3]%
    \def\mya{0}\def\myb{0}
    \csvreader[head to column names]{fruit.csv}{}{%
      \let\mya\myb
      \pgfmathsetmacro{\myb}{\myb+\Quantity}
      \slice{\mya/\mysum*360}{\myb/\mysum*360}{\Quantity}{\Name}
    }
    \end{tikzpicture}%
    
    \end{document}
    

    【讨论】:

    • 我如何让它只在分号处细分?
    • @B.A.Sylla 我添加了一个使用分号的示例
    猜你喜欢
    • 1970-01-01
    • 2020-10-31
    • 2018-06-12
    • 1970-01-01
    • 1970-01-01
    • 2014-01-09
    • 2021-12-04
    • 1970-01-01
    • 2020-05-21
    相关资源
    最近更新 更多