2016-09-26 95 views
0

尝试从数据的数据帧中产生一些直方图,并将它们按数据帧列分组。试过'by ='[下面],但是当它在Spyder中运行时,它将贯穿始终,当它绘制直方图时,它似乎将数据绘制在彼此的顶部['spyder'图像下方]。猜测这是因为'by ='的使用不正确?Spyder中的Pandas直方图'by'参数

[清楚,新的Python和熊猫]

import pandas as pd 
import urllib.request 
import csv 
import matplotlib.pyplot as plt 

url = 'http://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data' 

weburl = urllib.request.urlopen(url) 

df = pd.read_csv(weburl, names=['sepal length in cm', 'sepal width in cm', 'petal length in cm', 'petal width in cm', 'class']) 

columnsNames = ['sepal length in cm', 'sepal width in cm', 'petal length in cm', 'petal width in cm'] 

def prodHisto(integers): 

    mylist = list(integers) 

    for i in mylist: 
     x = df.hist(by = columnsNames, bins = i, column = columnsNames) 
    return x 

print(prodHisto([5,15,30])) 

spyder

回答

0

你最好不要使用函数生成一个情节,然后打印你所有不同获得的直方图您想要尝试的垃圾箱值。你一定会得到一个烂摊子。

函数HIST()绘出了结果本身,所以不把它(依次积直方图为I = 5,15,30)分配给一个变量。

形象化您要素的分布如下操作:

- >不使用通过

bin_list = [5,15,30] 

for i in bin_list: 
    plt.figure() #Creates a new figure 
    for j, chan in enumerate(df.columns): 
     plt.subplot(221 + j) 
     df[chan].hist(bins=i) 
     plt.title("%s" %chan) 

- 使用>由

bin_list = [5,15,30] 

for i in bin_list: 
    plt.figure() #Creates a new figure 
    df.hist(by=df.columns, bins=i) 
+0

具体尝试“使用”建议“,我得到以下错误:”AssertionError:石斑和轴必须是相同的长度“。我发现这个错误似乎发生在尝试按空列表分组时?但就我所追踪的,这里的石斑鱼是“柱子”,显然不是空的。 – jmil18