Matplotlib错误,在图表中显示给定数组中不存在的值

我正遇到一个奇怪的错误。

以下是绘制图表的代码:

import matplotib.pyplot as plt

fig,ax = plt.subplots(figsize=(10,6))
ax.hist(DF.A.values,alpha=0.5)
plt.xticks(np.arange(0,80+1,step=2),rotation=50)
plt.show()

它显示以下图表

Matplotlib错误,在图表中显示给定数组中不存在的值

问题在于0到8.0之间没有值。实际上在0和14.0之间有一个差距:

in : set(DF.A.values.tolist())
out : {0.0,14.0,15.0,15.5,16.0,16.5,...,84.0}

我想知道为什么它显示不存在的值。此外,我击落了内核,重新启动它,然后运行单元,它给出了同样奇怪的结果。

注意:
这是在jupyter实验室笔记本上完成的。 Jupyter实验室版本:0.35.3
Python版本:Python 3.7.4(在Linux上为Anconda,Inc.)
Matplotlib版本:3.0.2

tangshuo4444 回答:Matplotlib错误,在图表中显示给定数组中不存在的值

根据我的评论:第一个(自动确定的)垃圾箱从0变为8,所以这并不是一个错误

您有几种选择:

  1. 告诉matplotlib您想要更多的垃圾箱,例如:ax.hist(DF.A,50)
  2. 显式传递垃圾箱,例如:ax.hist(DF.A,range(DF.A.max()))
  3. 使用其他东西

鉴于此数据显然是一组离散值,使用hist往往会导致产生大量装箱伪像,例如如果两个附近的值落入垃圾箱,则计数将增加一倍,而任一边的垃圾箱将相对为空。一种选择是显示唯一值的计数,因为这倾向于减少装箱伪像。例如,此代码:

import matplotlib.pyplot as plt
import numpy as np
from scipy import stats

a = stats.poisson.rvs(5,size=10000)

fig,(ax1,ax2) = plt.subplots(nrows=2,sharex=True)

ax1.hist(a)

a_val,a_num = np.unique(a,return_counts=True)
ax2.vlines(a_val,a_num,lw=2,color='C0')
ax2.set_ylim(0,max(a_num)*1.06)

给予:

hist vs vlines

这也突出显示了分布的离散性质,质量仅处于特定值,而不是一些连续的支撑物被聚集到特定的容器中

本文链接:https://www.f2er.com/3122915.html

大家都在问