我的数据包含以下内容:
多数数<60,然后是2000年代的一些异常值。
我要在具有以下bin范围的直方图中显示它:
0-1, 1-2, 2-3, 3-4, ..., 59-60, 60-max
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.axes as axes
b = list(range(61)) + [2000] # will make [0, 1, ..., 60, 2000]
plt.hist(b, bins=b, edgecolor='black')
plt.xticks(b)
plt.show()
这显示以下内容:
基本上,您看到的是所有数字0 .. 60在左边一起压,而2000在右边。这不是我想要的。
因此,我删除了[2000]
并得到了我想要的东西:
如您所见,现在比较好,但是我仍然遇到以下问题:
如何解决此问题,以使图形周围没有空白(0之前和60之后有很大的差距)。
我如何解决这个问题,使得在60点之后,最后显示2000个刻度,同时仍保持大致相同的间距(不像第一个一样?)
答案 0 :(得分:0)
这是一种使用一些随机数据的骇客解决方案。我仍然不太明白您的第二个问题,但我尝试根据您的措辞来做些事情
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.axes as axes
fig, ax = plt.subplots(figsize=(12, 6))
data= np.random.normal(10, 5, 5000)
upper = 31
outlier = 2000
data = np.append(data, 100*[upper])
b = list(range(upper)) + [upper]
plt.hist(data, bins=b, edgecolor='black')
plt.xticks(b)
b[-1] = outlier
ax.set_xticklabels(b)
plt.xlim(0, upper)
plt.show()