2016-12-28 3 views
1

Простите мою терминологию, я не эксперт в области статистики или графика!Даже распределение этикеток процентили по оси x

Используя Pandas, я пытаюсь построить квантильные данные, которые весят до «5 9s». То есть, для данного DataFrame «DF», который имеет ряд «Foo» из неравномерно распределенных целочисленных значений:

q = df['foo'].quantile([.1, .2, .3, .4, .5, .6, .7, .8, .9, .99, .999, .9999, .99999, 1]) 
q.plot() 

результаты в участке, где интервалы х-оси между 0,9 и 1,0 сжимаются: enter image description here

Есть ли способ равномерно разместить квантильные ведра по оси x?

Спасибо!

+0

Одним из возможных вариантов является создание новой переменной, которая является 1-1 отображение квантилей ведрами, но считается от 1 до n, где n - количество ковшей. создайте график с этим как ось x, затем добавьте квантили в качестве меток. – lmo

+0

lmo, если вы хотите изменить это на ответ, я дам вам кредит - то, что вы предложили. Благодарю. – user1612443

+0

Это нормально Если вы хотите опубликовать свой код в качестве ответа. На данный момент я немного озабочен. Просто добавьте быстрое спасибо за предложение или подобное в конце. Я дам вам преимущество, если вы сообщите мне, когда вы опубликуете его. В противном случае, я пойду на него в эти выходные. – lmo

ответ

0

Принимая совет lmo, вот решение, которое работает на меня.

Для данного dataframe 'ДФ', который имеет 'A' серию:

percentiles = [.1, .2, .3, .4, .5, .6, .7, .8, .9, .99, .999, .9999, .99999, 1.0] 

pct = df['A'].quantile(percentiles) 
xticks = range(0, len(percentiles), 1) 
ax = pct.plot (xticks=xticks) 
ax.set_xticklabels([str(p) for p in percentiles) 
plt.show() 

enter image description here

0

Я хотел бы использовать pd.qcut

пример

import pandas as pd 
import numpy as np 

a = np.sort(np.random.rand(1000)) 
b = a.repeat(np.arange(len(a))) 
b += np.random.rand(len(b))/100 
s = pd.Series(b) 

s.hist() 

enter image description here

вы хотите эту
Используйте однако много бункеров, которые вы хотите. Я использовал 20. Я также передал параметр меток. Без него панды будут обозначать краями того места, где были сделаны разрезы.

q = pd.qcut(s, 20, labels=range(20)) 
+0

К сожалению, мои данные недостаточно распределены, чтобы избежать неповторимых краев ящиков. Во всяком случае, мне нужна способность показать точность _N_ 9 выше 90-го процентиля. Возможно, я полностью не понимаю ваш ответ. – user1612443

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