如何从包含有序元组的表格列表的制表符分隔的 csv 文件中绘制直方图?

如何从包含有序元组的表格列表的制表符分隔的 csv 文件中绘制直方图?

我想绘制一个直方图,其中 x 轴包含有序元组数据,y 轴包含其频率。包含以下数据的 CSV 文件:

x_values    y_frequency
(2,102,100) 6
(2,255,100) 30
(2,255,201) 76
(20,255,201)    102
(220,255,201)   34
(171,255,201)   47    

我尝试使用以下代码,但它没有给出正确的直方图。

\documentclass{article}
%\usepackage{pgfplots}
%\usepackage{filecontents}
\usepackage{filecontents}
\usepackage{pgfplots, pgfplotstable}
\usepgfplotslibrary{statistics}

\begin{document}
\begin{tikzpicture}
\begin{axis}[
ybar,
ymin=0
]
    \addplot +[
hist={
    bins=7,
    data min=0.5,
    %data max=4
}   
] table [x=x_values, y=y_frequency, col sep=tab] {data.csv};
\end{axis}
\end{tikzpicture}
\end{document}  

以下是 CSV 文件 data.csv:

x_values    y_frequency
2   3
4   9
8   1
0   5

答案1

这是获取坐标的建议。

\documentclass{article}
\usepackage{filecontents}
\begin{filecontents*}{data.csv}
x_values    y_frequency
(2,102,100) 6
(2,255,100) 30
(2,255,201) 76
(20,255,201)    102
(220,255,201)   34
(171,255,201)   47    
\end{filecontents*}
\usepackage{pgfplots, pgfplotstable}
\usepgfplotslibrary{statistics}
\pgfplotsset{compat=1.16}
% from https://tex.stackexchange.com/a/445369/121799
\newcommand*{\ReadOutElement}[4]{%
    \pgfplotstablegetelem{#2}{#3}\of{#1}%
    \let#4\pgfplotsretval
}
\begin{document}
\pgfplotstableread[header=true]{data.csv}\datatable
\pgfplotstablegetrowsof{\datatable}
\pgfmathtruncatemacro{\rownum}{\pgfplotsretval-1}
\foreach \X in {0,...,\rownum}
{\ReadOutElement{\datatable}{\X}{x_values}{\tmpx}
\ifnum\X=0
\xdef\lstSymbCoords{{\tmpx}}
\else
\xdef\lstSymbCoords{\lstSymbCoords,{\tmpx}}
\fi}
%\typeout{\lstSymbCoords}
\begin{tikzpicture}
\edef\temp{\noexpand\begin{axis}[
ybar,
ymin=0,
symbolic x coords={\lstSymbCoords},
 xticklabel style={
        rotate=90,
        anchor=east}
]}
\temp
\addplot[
% hist={
%     bins=7,
%     data min=0.5,
%     %data max=4
% }   
] table [x=x_values,y=y_frequency] {\datatable};
\end{axis}
\end{tikzpicture}
\end{document}  

在此处输入图片描述

相关内容