Я хотел бы создать столбчатую диаграмму с помощью pgfplots.
\documentclass{standalone}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usepackage{pgfplotstable}
\begin{document}
\pgfplotstableread[col sep=comma] {
name,value
A,1
B,2
C,1
D,3
}\mytable
\pgfplotsset{%
compat=1.8,
ybar,
compat/show suggested version=false,
}
\begin{tikzpicture}
\begin{axis}[
xlabel=name,
xtick=data,
xticklabels from table={\mytable}{name},
ylabel=value
]
\addplot table[x=name,y=value] {\mytable};
\end{axis}
\end{tikzpicture}
\end{document}
Но получил следующую ошибку:
! Package PGF Math Error: Could not parse input 'A' as a floating point number,
sorry. The unreadable part was near 'A'..
See the PGF Math package documentation for explanation.
Type H <return> for immediate help.
...
l.26 ...\addplot table[x=name,y=value] {\mytable};
решение1
После нескольких попыток, таких как удаление неиспользуемых пакетов, указание разделителя строк и т. д., выяснилось, что:
- столбчатые диаграммы являются одномерными
- поэтому вы указываете только одно значение
\begin{tikzpicture}
\begin{axis}[
xlabel=name,
xtick=data,
xticklabels from table={\mytable}{name}, % <<<
ylabel=value
]
\addplot table[x=value] {\mytable}; % <<<
\end{axis}
\end{tikzpicture}
Если бы вы указали y=value
, вы бы снова получили ошибки:
\addplot table[y=value] {\mytable};
Попытка прочитать столбец с именами (символами) в качестве значений приведет к ошибке:
\addplot table[x=name ...
% https://tex.stackexchange.com/questions/705829/plot-bar-chart-with-pgfplots
\documentclass{standalone}
%\usepackage{tikz}
\usepackage{pgfplots}
%\pgfplotsset{compat=newest}
%\usepackage{pgfplotstable}
\begin{document}
\pgfplotstableread[row sep=\\,col sep=comma] {
name,value\\
A,1\\
B,2\\
C,1\\
D,3\\
}\mytable
\pgfplotsset{%
compat=1.8,
ybar,
compat/show suggested version=false,
}
\begin{tikzpicture}
\begin{axis}[
xlabel=name,
xtick=data,
xticklabels from table={\mytable}{name}, % <<<
ylabel=value
]
\addplot table[x=value] {\mytable}; % <<<
\end{axis}
\end{tikzpicture}
\end{document}