我正在使用matplotlib生成直方图。
我需要宽度不等的垃圾桶,因为我最感兴趣的是最低的垃圾箱。 现在我正在这样做:
plt.hist(hits_array, bins = (range(0,50,10) + range(50,550,50)))
这创造了我想要的东西(前5个箱子的宽度为10,其余的为50个),但前五个箱子当然比后者更窄,因为所有箱子都显示在同一个轴上
有没有办法影响x轴或直方图本身,所以我可以在前5个分区后打破比例,所以所有分档都显示为同样宽?
(我意识到这将创建一个扭曲的视图,我很好,尽管我不介意轴的两个不同缩放部分之间的一些空间。)
任何帮助将不胜感激。 谢谢!
答案 0 :(得分:2)
您可以使用bar
,无需拆分轴。这是一个例子,
import matplotlib.pylab as plt
import numpy as np
data = np.hstack((np.random.rand(1000)*50,np.random.rand(100)*500))
binwidth1,binwidth2=10,50
bins=range(0,50,binwidth1)+range(50,550,binwidth2)
fig,(ax) = plt.subplots(1, 1)
y,binEdges=np.histogram(data,bins=bins)
ax.bar(0.5*(binEdges[1:]+binEdges[:-1])[:5], y[:5],width=.8*binwidth1,align='center')
ax.bar(0.5*(binEdges[1:]+binEdges[:-1])[5:], y[5:],width=.8*binwidth1,align='center')
plt.show()
如果您真的想拆分轴,请查看here。
答案 1 :(得分:2)
我在这里有一个类似的问题,答案是使用脏黑客。 Matplotlib histogram with collection bin for high values
因此,使用以下代码,您将获得已有的丑陋直方图。
def plot_histogram_04():
limit1, limit2 = 50, 550
binwidth1, binwidth2 = 10, 50
data = np.hstack((np.random.rand(1000) * limit1, np.random.rand(100) * limit2))
bins = range(0, limit1, binwidth1) + range(limit1, limit2, binwidth2)
plt.subplots(1, 1)
plt.hist(data, bins=bins)
plt.savefig('my_plot_04.png')
plt.close()
为了使箱子的宽度相等,你的确必须使它们的宽度相等!这意味着操纵你的数据,使它们全部落在宽度相等的箱子里,然后玩弄xlabel。
def plot_histogram_05():
limit1, limit2 = 50, 550
binwidth1, binwidth2 = 10, 50
data = np.hstack((np.random.rand(1000) * limit1, np.random.rand(100) * limit2))
orig_bins = range(0, limit1, binwidth1) + range(limit1, limit2 + binwidth2, binwidth2)
data = [(i - limit1) / (binwidth2 / binwidth1) + limit1
if i >= limit1 else i for i in data]
bins = range(0, limit2 / (binwidth2 / binwidth1) + limit1, binwidth1)
_, ax = plt.subplots(1, 1)
plt.hist(data, bins=bins)
xlabels = np.array(orig_bins, dtype='|S3')
N_labels = len(xlabels)
print xlabels
print bins
plt.xlim([0, bins[-1]])
plt.xticks(binwidth1 * np.arange(N_labels))
ax.set_xticklabels(xlabels)
plt.savefig('my_plot_05.png')
plt.close()
答案 2 :(得分:0)
import pandas as pd
import numpy as np
df= data
bins = np.arange(0,0.1,0.001)
df.hist(bins=bins,color='grey')