2016-08-10 5 views
3

, поэтому я пытался построить гистограмму с использованием python с mathplotlib. Итак, у меня есть два набора данных, в основном высоты образца мужчин и женщин в виде списка на питоне, импортированного из файла csv.Как создать гистограмму из списка значений с помощью matplotlib?

код, который я использую:

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/ –

+0

Я получаю ту же ошибку, используя этот код. Я считаю, что проблема связана с тем, как я импортировал набор данных? –

ответ

1

Примечание: Предположим, ваши файлы содержат несколько строк (разделенные запятой) и первая запись в каждая строка - это высота.

Ошибка при добавлении «данных» в список women и men. row[0] на самом деле строка. Следовательно, matplotlib запутан. Я предлагаю вам запустить этот код перед построением (питон 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])]

+0

Ах да, теперь он отлично работает! Спасибо за помощь! –

+0

Приятно знать, что это поможет! Не могли бы вы принять мой ответ, отметив галочку рядом с ним? Спасибо, кучи. Счастливое кодирование – TuanDT

Смежные вопросы