用pandas系列创建直方图

9
我想制作一个 pandas 序列(prior_fails)的直方图,但我一直收到以下 ValueError 错误提示:
ValueError: view limit minimum -36814.8560105 is less than 1 and is an 
invalid Matplotlib date value. This often happens if you pass a non-datetime 
value to an axis that has datetime units

这是我调用直方图的方式。
plt.hist(prior_fails)
plt.ylabel('Frequency')
plt.xlabel('Days of Failure (%)')

prior fails是具有以下索引的系列:

prior_fails.index
Out[85]: 
Index([u'prior110', u'prior113', u'prior118', u'prior141', u'prior144',
   u'prior16', u'prior217', u'prior223', u'prior245', u'prior29',
   u'prior352', u'prior360', u'prior370', u'prior438', u'prior55',
   u'prior59', u'prior60', u'prior68', u'prior74', u'prior88'],
  dtype='object')

And content:

prior_fails
Out[86]: 
prior110    13.962170
prior113    10.861125
prior118    21.304131
prior141    11.309109
prior144    11.363863
prior16     14.479841
prior217    10.403186
prior223    14.201095
prior245     7.974116
prior29     17.401692
prior352     9.860627
prior360    12.339472
prior370    16.207068
prior438    16.381284
prior55     20.587357
prior59     10.452962
prior60     15.828771
prior68     16.769537
prior74     16.918865
prior88      9.805874
dtype: float64

非常感谢您的帮助。我对Python还很陌生。谢谢!


每当我尝试使用plt.hist时,就会出现错误。这不是数据的问题,似乎是一个plt问题,因为当我尝试做示例时它会给出相同的错误:https://dev59.com/uVwX5IYBdhLWcg3w8TMf - Emma
你能发布一下导入或定义“plt”的代码吗?matplotlib.__version__matplotlib.__file__的输出是什么? - PaSTE
我这样导入了matplotlib:import matplotlib.pyplot as plt - Emma
我正在使用的matplotlib版本是“2.2.2”。 - Emma
我刚刚安装了2.2.3版本。 - Emma
1
它能够正常工作了,感谢更新后的 matplotlib! - Emma
2个回答

9

好的,我使用matplotlib或pandas(它使用matplotlib绘制)绘制直方图时没有遇到任何错误。

import pandas as pd

data = {'ind': ['prior110', 'prior113', 'prior118', 'prior141', 'prior144', 'prior16', 'prior217', 'prior223', 'prior245', 'prior29', 'prior352', 'prior360', 'prior370', 'prior438', 'prior55', 'prior59', 'prior60', 'prior68', 'prior74', 'prior88'],
        'val': [13.96217, 10.861125, 21.304131, 11.309109, 11.363863, 14.479841, 10.403186, 14.201095, 7.974116, 17.401692, 9.860627, 12.339472, 16.207068, 16.381284, 20.587357, 10.452962, 15.828771, 16.769537, 16.918865, 9.805874]}

prior_fails = pd.DataFrame(data, columns=['ind', 'val'])

prior_fails.set_index('ind', inplace=True)

prior_fails

enter image description here

# with pandas
prior_fails.hist()
plt.ylabel('Frequency')
plt.xlabel('Days of Failure (%)')
plt.title('Histogram')

enter image description here

# with matplotlib
import matplotlib.pyplot as plt
plt.hist(prior_fails.val)
plt.ylabel('Frequency')
plt.xlabel('Days of Failure (%)')

enter image description here

如果你仍然遇到错误,或许你可以在绘图之前尝试使用%matplotlib inline。这会将matplotlib使用的后端更改为inline。有时默认的后端可能会因为某些原因而损坏或损坏,所以你可以尝试更改后端来查看是否会导致问题。还有其他后端,如qt5agg等等。因此,如果这也无法解决您的问题,也许您可以尝试其中一些后端。

1

要制作一个系列的直方图,我通常直接在系列上调用.hist(),它在幕后使用matplotlib

import pandas as pd
import numpy as np

data = pd.Series(np.random.randn(1000))

data.hist(bins = 50)

给出:

enter image description here

这是您想要的吗?

是的,那就是我想要的,但是当我尝试你的例子时,我得到了相同的ValueError。 - Emma
使用上述代码片段,没有直方图显示在这里...不知道为什么。 - daparic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接