2014-02-17 3 views
2

Итак, у меня есть некоторые данные, которые я хочу построить по гистограмме плотности плотности (неравной ширины класса), и через некоторые поисковые запросы в Интернете я создал это, чтобы позволить мне делать это.Несколько сломанной оси на гистограмме в Matplotlib

import numpy as np 
import matplotlib.pyplot as plt 

plt.xkcd() 
freqs = np.array([3221, 1890, 866, 529, 434, 494, 382, 92, 32, 7, 7]) 
bins = np.array([0, 5, 10, 15, 20, 30, 50, 100, 200, 500, 1000, 1500]) 
widths = bins[1:] - bins[:-1] 
heights = freqs.astype(np.float)/widths 

plt.xlabel('Cost in Pounds') 
plt.ylabel('Frequency Density') 

plt.fill_between(bins.repeat(2)[1:-1], heights.repeat(2), facecolor='steelblue') 
plt.show() 

Как вы можете видеть, однако, эти данные простираются на тысячи на оси х и по оси у (плотность) идет от крошечных данных (< 1) до обширных данных (> 100). Чтобы решить эту проблему, мне нужно сломать обе оси. Наиболее близким к тому, что я нашел до сих пор, является this, который я нашел трудным в использовании. Сможете ли вы помочь?
Спасибо, Aj.

ответ

0

Вы можете просто использовать планку. Установка ярлыков xtick для представления значений бинов.

С логарифмической шкале у

import numpy as np 
import matplotlib.pyplot as plt 

plt.xkcd() 
fig, ax = plt.subplots() 
freqs = np.array([3221, 1890, 866, 529, 434, 494, 382, 92, 32, 7, 7]) 
freqs = np.log10(freqs) 
bins = np.array([0, 5, 10, 15, 20, 30, 50, 100, 200, 500, 1000, 1500]) 
width = 0.35 
ind = np.arange(len(freqs)) 
rects1 = ax.bar(ind, freqs, width) 
plt.xlabel('Cost in Pounds') 
plt.ylabel('Frequency Density') 
tick_labels = [ '{0} - {1}'.format(*bin) for bin in zip(bins[:-1], bins[1:])] 
ax.set_xticks(ind+width) 
ax.set_xticklabels(tick_labels) 
fig.autofmt_xdate() 
plt.show() 
+0

Спасибо! Однако часть того, что я пытаюсь сделать, представляет собой неравную ширину класса, представляя частоту по области. Для этого мне нужно показать ширину сюжета. Спасибо за помощь до сих пор. – user3033981

+0

@ user3033981 ahh, нормально. Я думаю, что логарифмическая шкала в обоих направлениях тоже не поможет. Было бы трудно увидеть относительную ширину в масштабе шкалы. Вы также можете установить ширину каждого бара отдельно в этом примере, но такая же проблема возникает, поскольку ширина должна быть уменьшена, чтобы иметь смысл. – M4rtini

Смежные вопросы