Как построить сетку гистограмм по категориальной переменной в питоне? - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть набор данных, содержащий 50 числовых переменных и 1 категориальную переменную (сегмент_hc_print, имеющую 6 категорий).Я хочу увидеть разброс каждой переменной в каждой категории путем построения сетки гистограммы, где каждая строка будет представлять категорию, столбец будет представлять переменную, а каждая ячейка в таблице является гистограммой.Я пытаюсь код ниже для создания сетки для одной переменной:

def grid_histogram(variable, bins):
    fig = plt.figure(figsize=(20,10))
    fig.set_size_inches(10,10, forward = True)
    fig.suptitle(variable, fontsize = 8)
    plt.locator_params(numticks = 4)

    for i in np.arange(0, 6, 1):
        ax = plt.subplot(6,1,i+1)
        ax.hist(sensor_df_print_sample_v2[sensor_df_print_sample_v2.segment_hc_print == i][variable], bins)
        ax.set_title("cluster = " + str(i), fontsize = 5)
        ymin, ymax = ax.get_ylim()
        ax.set_yticks(np.round(np.linspace(ymin, ymax, 3), 2))
        xmin, xmax = ax.get_xlim()
        ax.set_xticks(np.round(np.linspace(xmin, xmax,3),2))
        plt.setp(ax.get_xticklabels(), rotation = 'vertical', fontsize = 4)

    fig.tight_layout()
    fig.savefig(str(variable) + '_histogram.pdf')
    plt.show()

И вот что я получаю: образец гистограммы

Как создать сеткуиз таких гистограмм каждая переменная сложена справа от другой?Этот код ниже генерирует идеальный размер нужной мне гистограммы. образец гистограммы

1 Ответ

0 голосов
/ 08 февраля 2019

если я правильно понимаю, вы можете просто создать сетку с plt.subplots().В приведенном ниже примере я отображаю первые 5 переменных в виде столбцов:

nr_of_categories = 6
nr_of_variables = 5

fig, ax = plt.subplots(nrows = nr_of_categories, cols = nr_of_variables, figsize = (20, 20))

for category in np.arange(0, nr_of_categories):
  for variable in np.arange(0, nr_of_variables):
    ax[category, variable].hist(sensor_df_print_sample_v2[sensor_df_print_sample_v2.segment_hc_print == i][variable], bins)

    # and then the rest of your code where you replace ax with ax[category, variable]


...