Matplotlib 错误,在给定数组中不存在的图表中显示值
Matplotlib bug, displays values in charts that does not exist in the given array
我遇到了一个奇怪的错误。
下面是绘制图表的代码:
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()
显示如下图表
问题是 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 lab notebook 上完成的。
Jupyter 实验室版本:0.35.3
Python 版本:Python 3.7.4(Anaconda, Inc. 在 linux 上)
Matplotlib 版本:3.0.2
根据我的评论:第一个(自动确定的)bin 从 0 变为 8,所以这不是真正的错误
你有几个选择:
- 告诉 matplotlib 你想要更多的 bins,例如:
ax.hist(DF.A, 50)
- 显式传递 bin,例如:
ax.hist(DF.A, range(DF.A.max()))
- 使用其他东西
鉴于此数据显然是一组离散值,使用 hist
往往会导致许多装箱伪像,例如如果两个附近的值落入一个 bin 计数加倍,而 bins 任一侧将相对空。一个选项是显示唯一值的计数,因为这往往会导致更少的装箱伪影。例如,此代码:
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, 0, a_num, lw=2, color='C0')
ax2.set_ylim(0, max(a_num)*1.06)
给出:
这也突出了分布的离散性,质量仅处于特定值,而不是一些连续的支持被聚合到特定的容器中
我遇到了一个奇怪的错误。
下面是绘制图表的代码:
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()
显示如下图表
问题是 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 lab notebook 上完成的。
Jupyter 实验室版本:0.35.3
Python 版本:Python 3.7.4(Anaconda, Inc. 在 linux 上)
Matplotlib 版本:3.0.2
根据我的评论:第一个(自动确定的)bin 从 0 变为 8,所以这不是真正的错误
你有几个选择:
- 告诉 matplotlib 你想要更多的 bins,例如:
ax.hist(DF.A, 50)
- 显式传递 bin,例如:
ax.hist(DF.A, range(DF.A.max()))
- 使用其他东西
鉴于此数据显然是一组离散值,使用 hist
往往会导致许多装箱伪像,例如如果两个附近的值落入一个 bin 计数加倍,而 bins 任一侧将相对空。一个选项是显示唯一值的计数,因为这往往会导致更少的装箱伪影。例如,此代码:
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, 0, a_num, lw=2, color='C0')
ax2.set_ylim(0, max(a_num)*1.06)
给出:
这也突出了分布的离散性,质量仅处于特定值,而不是一些连续的支持被聚合到特定的容器中