2016-10-17 3 views
2

я создаю гистограмму в панд просто с помощью:Создание гистограмм в панде с колоннами с равноудаленным основанием, не пропорционального диапазоном

train_data.hist("MY_VARIABLE", bins=[0,5, 10,50,100,500,1000,5000,10000,50000,100000]) 

(train_data является пандой ДФ).

Проблема заключается в том, что, поскольку диапазон [50000,100000] настолько велик, я едва могу видеть небольшие диапазоны [0,5] или [5,10] т.д. Я хотел бы гистограмму, чтобы иметь равноотстоящие полосы по оси х, а не пропорционально диапазону. Это возможно?

ответ

1

Вы можете сделать это следующим образом:

bins = [0, 5, 10,50,100,500,1000,5000,10000,50000,100000] 
df.groupby(pd.cut(df.a, bins=bins, labels=bins[1:])).size().plot.bar(rot=0) 

Демо:

df = pd.DataFrame(np.random.randint(0,10**5,(10**4,2)),columns=list('ab')) 
bins = [0, 5, 10,50,100,500,1000,5000,10000,50000,100000] 
df.groupby(pd.cut(df.a, bins=bins, labels=bins[1:])).size().plot.bar(rot=0) 

enter image description here

результаты фильтрации:

threshold = 100 
(df.groupby(pd.cut(df.a, 
        bins=bins, 
        labels=bins[1:])) 
    .size() 
    .to_frame('count') 
    .query('count > @threshold') 
) 

Out[84]: 
     count 
a 
5000  396 
10000  492 
50000 4044 
100000 4961 

Plotting фильтруется:

(df.groupby(pd.cut(df.a, 
        bins=bins, 
        labels=bins[1:])) 
    .size() 
    .to_frame('count') 
    .query('count > @threshold') 
    .plot.bar(rot=0, width=1.0) 
) 

enter image description here

+0

Очень хороший ответ! В любом случае я могу сделать бары смежными (без пробелов между ними?) – user

+0

@user, спасибо! Что вы имеете в виду? Вы хотите пропустить бары, где 'count == 0'? – MaxU

+0

Вы видите на своих фотографиях, что полосы имеют фиксированную ширину. Я хочу, чтобы размер (ширина) больше, чтобы бары были прикреплены друг к другу. Если это возможно. – user

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

  • Нет связанных вопросов^_^