2017-04-02 405 views
0

我有一张从熊猫数据框中创建的直方图,我想绘制一条代表数据集平均值的垂直虚线。我已审查this thread,而这正是我要寻找的风格,但我无法弄清楚如何使我的代码(下)工作:使用matplotlib绘制直方图上的虚线平均值

import pandas as pd 
import matplotlib.pyplot as plt 

#import csv file into pandas dataframe 
df = pd.read_csv('/path/to/my/file') 

#calculating mean 
m = df.mean() 
#print(m) 

#plotting histogram 
df.plot(kind='hist') 
#plt.axvline(m, color = 'r', linestyle = 'dashed', linewidth = 2) 

我最终收到此错误:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). 

不知道这意味着什么,任何帮助将不胜感激。

编辑:我的数据文件是一列csv,第一行是一个标题(字符串),所有后续107行是从应用程序范围内的值。 1.0E + 11到4.0E + 11


假数据(Python 2.7版)

import io 
import numpy as np 
a = np.linspace(1, 4, num = 20) 
s = 'E11\n'.join(map(str, a)) 
s += 'E11' 
#print(s) 
df = pd.read_csv(io.BytesIO(s)) 
+0

您可以发布您的数据文件的样本? – Shaunak

+0

发表了上面的描述,这有帮助吗? – NaN

+0

哪一行引发异常?您能发布完整的Traceback吗? – wwii

回答

0

m是熊猫系列,它有一个索引和值 - Matplotlib肯定不知道如何处理它。

>>> print m 
1.0E11 2.578947e+11 
dtype: float64 
>>> type(m) 
<class 'pandas.core.series.Series'> 
>>> 

平均的值是m[0]m.values,所以:

plt.axvline(m[0], color = 'r', linestyle = 'dashed', linewidth = 2) 
#or 
plt.axvline(m.values, color = 'r', linestyle = 'dashed', linewidth = 4) 
+0

这对我工作谢谢! – NaN

-1

我认为你应该使用m.all()而不是米他们使用plt.show()来绘制直方图。所以代码看起来就像这样:

#plotting histogram 
# df.plot(kind='hist') 
plt.axvline(m.all(), color = 'r', linestyle = 'dashed', linewidth = 2) 
plt.show() 
+0

是否为你工作? – wwii

+0

是的,我用这种方法得到了情节。 – ida