如何使用matplotlib从一组值生成直方图?

3

我将尝试使用Python和Matplotlib绘制直方图,因此有两个数据集,基本上是男女样本的身高列表,从CSV文件导入到Python中。

我正在使用以下代码:

import csv
import numpy as np
from matplotlib import pyplot as plt
men=[]
women=[]

with open('women.csv','r') as f:
    r1=csv.reader(f, delimiter=',')
    for row in r1:
        women+=[row[0]]

with open('men.csv','r') as f:
    r2=csv.reader(f, delimiter=',')
    for row in r2:
        men+=[row[0]]


fig = plt.figure()
ax = fig.add_subplot(111)

numBins = 20
ax.hist(men,numBins,color='blue',alpha=0.8)
ax.hist(women,numBins,color='red',alpha=0.8)
plt.show()

我得到的错误:

Traceback (most recent call last):
  File "//MEME/Users/Meme/Miniconda3/Lib/idlelib/test.py", line 22, in <module>
    ax.hist(men,numBins,color='blue',alpha=0.8)
  File "\\MEME\Users\Meme\Miniconda3\lib\site-packages\matplotlib\__init__.py", line 1811, in inner
    return func(ax, *args, **kwargs)
  File "\\MEME\Users\Meme\Miniconda3\lib\site-packages\matplotlib\axes\_axes.py", line 5983, in hist
    raise ValueError("color kwarg must have one color per dataset")
ValueError: color kwarg must have one color per dataset

1
这里有一个教程:https://plot.ly/matplotlib/histograms/ - Laurent LAPORTE
我使用那段代码也遇到了同样的错误。 我相信问题与我如何导入数据集有关? - Stefan de Souza
1个回答

1

注意:假设您的文件包含多行(逗号分隔),每行的第一个条目是高度。

bug 出现在将“data”附加到womenmen列表时。 row [0]实际上是一个字符串。因此,matplotlib 感到困惑。我建议您在绘图之前运行此代码(Python 2):

import csv
import numpy as np
from matplotlib import pyplot as plt
men=[]
women=[]
import pdb;
with open('women.csv','r') as f:
    r1=csv.reader(f, delimiter=',')
    for row in r1:
        women+=[(row[0])]

with open('men.csv','r') as f:
    r2=csv.reader(f, delimiter=',')
    for row in r2:
        men+=[(row[0])]


fig = plt.figure()
ax = fig.add_subplot(111)
print men
print women
#numBins = 20
#ax.hist(men,numBins,color='blue',alpha=0.8)
#ax.hist(women,numBins,color='red',alpha=0.8)
#plt.show()

一个样例输出将会是:
['1','3','3']
['2','3','1']

因此,在循环中,您只需要将字符串转换为浮点数或整数,例如 women += [float(row[0])] men += [float(row[0])]

啊,没错,现在它完美地运行了!感谢您的快速帮助! - Stefan de Souza
很高兴能帮到你!您可以通过勾选旁边的勾来接受我的答案吗?非常感谢。祝编码愉快。 - TuanDT

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接