使用matplotlib

时间:2017-04-02 15:23:40

标签: python pandas matplotlib plot

我有一个从pandas数据框创建的直方图,我想绘制一条表示数据集平均值的垂直虚线。我已经审核了this thread,这正是我正在寻找的风格,但是,我无法弄清楚如何使其与我的代码一起使用(下方):

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行都是app的值。 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))

2 个答案:

答案 0 :(得分:0)

m是一个Pandas系列,它有一个索引和一个值--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)

答案 1 :(得分:-1)

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

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