[英]pie chart from csv file in LaTeX and pgf-pie
我正在嘗試使用 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 文件中的分隔符,因此您需要在組內保護它:
\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
package。相反,您可以使用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}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.