pyplot.hist histt​​ype ='step'故障取决于数据

时间:2013-07-18 14:29:16

标签: python matplotlib histogram

我正在进行大量的绘图,并使用pyplot.hist函数遇到了一个奇怪的异常现象。我已经将我的程序调整到最小的工作示例以显示问题。

import matplotlib.pyplot as plt
import numpy as np
var = [25.00, 35.68, 29.02, 25.46, 30.58, 30.86, 38.08, 38.63,
       25.19, 32.11, 26.57, 37.23, 37.97, 27.38, 27.25, 33.33,
       31.41, 26.93, 28.42, 25.99, 30.09, 31.87, 34.40, 33.46,
       31.76, 34.03, 27.01, 27.52, 30.41, 25.84, 25.84]
fig = plt.figure()
plt.hist(var, histtype = 'step')
plt.show()

当我运行脚本时,我得到了这个:

Anomaly http://dl.dropbox.com/u/13695305/Figure%201_005.png

但是,如果我删除最后5个元素:27.01,27.52,30.41,25.84,25.84,那么脚本运行正常。

import matplotlib.pyplot as plt
import numpy as np
var = [25.00, 35.68, 29.02, 25.46, 30.58, 30.86, 38.08, 38.63,
       25.19, 32.11, 26.57, 37.23, 37.97, 27.38, 27.25, 33.33,
       31.41, 26.93, 28.42, 25.99, 30.09, 31.87, 34.40, 33.46,
       31.76, 34.03]
fig = plt.figure()
plt.hist(var, histtype = 'step')
plt.show()

Working! http://dl.dropbox.com/u/13695305/Figure%201_004.png

这让我抓狂!我尝试过使用numpy数组,但这并没有帮助。 Numpy随机工作没问题。但由于某种原因,我的特定数据集(类型?)导致它失败。有谁知道为什么?

编辑:重要的是要注意该函数与histt​​ype ='bar'一起正常工作,但是错误出现在histt​​ype ='step'。希望有人可以重现这个问题。

1 个答案:

答案 0 :(得分:1)

不幸的是it's a bug,但有一个修复:手动为你的情节设置ymin

import matplotlib.pyplot as plt
import numpy as np

var = [[25.00, 35.68, 29.02, 25.46, 30.58, 30.86, 38.08, 38.63,
        25.19, 32.11, 26.57, 37.23, 37.97, 27.38, 27.25, 33.33,
        31.41, 26.93, 28.42, 25.99, 30.09, 31.87, 34.40, 33.46,
        31.76, 34.03, 27.01, 27.52, 30.41, 25.84, 25.84]]
fig, ax = plt.subplots()#figsize = (10, 10))
ax.hist(var[0],histtype = 'step')
plt.ylim(ymin=0)
plt.show()

然而,v1.3似乎修复了该错误。显然我正在使用早期版本。

>>> matplotlib.__version__
'1.1.1rc'

因此,升级matplotlib可能会解决问题。