2017-02-13 2 views
1

У меня есть набор данных, который мне удалось установить в интервалы 250, и мне очень сложно составить график значений правильно. Я имел взгляд наПостроение данных с биндингом с неровными бункерами

python plot simple histogram given binned data

How to make a histogram from a list of data

, но в моем случае все это я получаю одну вертикальную линию.

для справки мой Binned данных выглядит следующим образом:

(0, 250]    2 
(250, 500]    1 
(500, 750]    5 
(750, 1000]   13 
(1000, 1250]   77 
(1250, 1500]   601 
(1500, 1750]   1348 
(1750, 2000]   3262 
(2000, 2250]   3008 
(2250, 2500]   5118 
(2500, 2750]   4576 
(2750, 3000]   5143 
(3000, 3250]   3509 
(3250, 3500]   4390 
(3500, 3750]   2749 
(3750, 4000]   2794 
(4000, 4250]   1391 
(4250, 4500]   1753 
(4500, 4750]   1099 
(4750, 5000]   1592 
(5000, 5250]   688 
(5250, 5500]   993 
(5500, 5750]   540 
(5750, 6000]   937 
(6000, 6250]   405 
(6250, 6500]   572 
(6500, 6750]   202 
(6750, 7000]   369 
(7000, 7250]   164 
(7250, 7500]   231 
        ... 
(7750, 8000]   285 
(8000, 8250]   55 
(8250, 8500]   116 
(8500, 8750]   29 
(8750, 9000]   140 
(9000, 9250]   31 
(9250, 9500]   68 
(9500, 9750]   20 
(9750, 10000]   132 
(10000, 10250]   15 
(10250, 10500]   29 
(10500, 10750]   21 
(10750, 11000]   73 
(11000, 11250]   26 
(11250, 11500]   36 
(11500, 11750]   21 
(11750, 12000]   74 
(12000, 12250]   5 
(12250, 12500]   50 
(12500, 12750]   13 
(12750, 13000]   34 
(13000, 13250]   4 
(13250, 13500]   45 
(13500, 13750]   14 
(13750, 14000]   53 
(14000, 14250]   6 
(14250, 14500]   17 
(14500, 14750]   7 
(14750, 15000]   79 
(15000, 10000000]  256 

где последний интервал охватывает все больше чем 15000. Я поставил выше значения в list затем попытался построить:

bins = [i for i in range(0, 15001, 250)] 
bins.append(10000000) 
categories = pd.cut(data["price"], bins) 
price_binned = list(pd.value_counts(categories).reindex(categories.cat.categories)) 
plt.hist(price_binned) 

, которая производит гистограмму с 12 бункеров. добавив bin аргумент

plt.hist(price_binned, bins=(bin_num+1)) 

создает гистограмму, где я получаю очень высокую вертикальную линию слева. Наконец, я рассматривал возможность добавления plt.xticks(bins), но затем я получаю график, который ничего не производит.

Есть ли в любом случае, что я мог бы создать гистограмму, где ось x - это значения бункера, а ось y - значения в бункерах?

using <code>plt.bar()</code>

использования plt.bar()

using <code>plt.hist()</code> with no bin argument

используя plt.hist() без какого-либо бен аргумента

using <code>plt.hist()</code> with bin=bins

с использованием plt.hist() с бункером = бункера

using seaborn

использование Сиборна

+0

Данные, которые вы показываете, являются гистограммой. Поэтому довольно непонятно, к чему вы стремитесь. – ImportanceOfBeingErnest

+0

Я хотел бы визуальное представление данных, а не просто иметь его как список – Lukasz

+0

Конечно, но что должно быть иначе в визуальном представлении, чем на гистограмме, которую у вас уже есть? – ImportanceOfBeingErnest

ответ

2

Основная проблема у вас есть, кажется, что вы просите plt.hist() и sns.distplot() создавать гистограммы ваших предварительно Binned данных гистограммы.

Вы можете использовать гистограмму, чтобы облегчить вашу пользовательскую схему биннинга с переменной price_binned следующим образом:

fig, ax = plt.subplots(1, 1) 
ax.bar(range(len(bins)), price_binned, width=1, align='center') 
ax.set_xticklabels([x + 125 for x in bins[:-1]]) 
plt.show() 

Где я использовал среднюю точку значения в качестве метки для каждого лотка. Это можно поменять местами для любой другой маркированной метки, которую вы предпочитаете.

Вот результат: Я использую (большинство) ваших данных (некоторые из них отсутствуют): result.

+0

@Lukasz Если этот ответ разрешил ваш вопрос, пожалуйста, рассмотрите [принятие его как решение] (http://stackoverflow.com/help/someone-answers). – Brian

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