来自CSV文件的Matplotlib Pyplot饼图

时间:2016-02-21 14:52:22

标签: python csv matplotlib charts

我有一个包含1列,值为0或1的CSV文件,我试图将值的数量绘制为饼图。

我试过了:

fileName = sys.argv[1]
col1 = sys.argv[2]

file = pd.read_csv(fileName)
data = np.array(file)[:,col1]

labels = 'True', 'False'
sizes = data
colors = ['red', 'blue']

plt.pie(sizes, labels=labels, colors=colors, autopct='%1.1f%%', shadow=True, startangle=140)
plt.axis('equal')
plt.show()

但它错了。如何从CSV列显示2切片饼图?这些值无序。我用条形图做了类似的事情,它自动完全解决了这个问题。

回溯:

Traceback (most recent call last):
  File "pie.py", line 18, in <module>
plt.pie(sizes, labels=labels, colors=colors, autopct='%1.1f%%', shadow=True, startangle=140)
  File "~\matplotlib\pyplot.py", line 3137, in pie
frame=frame, data=data)
  File "~\matplotlib\__init__.py", line 1811, in inner
return func(ax, *args, **kwargs)
  File "~\matplotlib\axes\_axes.py", line 2559, in pie
raise ValueError("'label' must be of length 'x'")
ValueError: 'label' must be of length 'x'

1 个答案:

答案 0 :(得分:0)

问题是数据量(sizes)大于或小于2(labels的数量)。 验证数据和标签具有相同数量的数据:

labels = 'True', 'False'
sizes = data
colors = ['red', 'blue']
assert len(sizes) == len(labels)
plt.pie(sizes, labels=labels, colors=colors, autopct='%1.1f%%', shadow=True, startangle=140)

如果断言失败,则必须输入更多/更少的标签和颜色,具体取决于sizes中的数据量。