2017-04-02 406 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