Создание подзаговоров из различных таблиц с помощью matplotlib - PullRequest
1 голос
/ 24 сентября 2019

У меня есть 6 наборов данных за 2011-2016 годы, основанных на преступлениях.Я извлек один столбец с именем «Приоритет», который может иметь значение только 1 или 2. Это означает, что преступление имеет приоритет 1 или 2. Я создал отдельную таблицу из каждого набора данных для подсчетаприоритеты в каждом наборе данных.

    Priority  Count in 2011
1       1.0          36699
2       2.0         143314

   Priority  Count in 2012
0       1.0          41926
1       2.0         145504

   Priority  Count in 2013
1       1.0          43171
2       2.0         144859

   Priority  Count in 2014
0         1          42773
1         2         144707

   Priority  Count in 2015
1         1          42418
2         2         150162

   Priority  Count in 2016
0       1.0          24555
1       2.0          86272

Я хочу получить 3x2 subplot, который является гистограммой.Я знаю, как это сделать, но когда я попытался произвести все 6 вместе, были ошибки.

Я гуглил, как это сделать, и наткнулся на сайт matplotlib (https://matplotlib.org/3.1.1/gallery/subplots_axes_and_figures/subplots_demo.html), который привел меня к фрагменту кода, который я адаптировал для:

fig, axs = plt.subplots(3, 2)
plt.set_title('2011 Priority Counts')
axs[0, 0].pri_2011.plot.bar()
axs[0, 0].xlabel('Priority Type')
axs[0, 0].ylabel('Reported crimes')

    .
    .
    .

plt.set_title('2016 Priority Counts')
axs[3, 2].pri_2016.plot.bar()
axs[3, 2].xlabel('Priority Type')
axs[3, 2].ylabel('Reported crimes')
plt.show()

, который вызывает много ошибок, таких как: "AttributeError: module 'matplotlib.pyplot' has no attribute 'set_title'", "AttributeError: 'AxesSubplot' object has no attribute 'pri_2011'" и т. Д.

Я подумал включить в команду «pri_2011», чтобы сделать его первым графиком в позиции [0, 0] подплота слева, что будет из первой таблицы. «Pri_2016» будет вв правом нижнем углу подплота, который является последним показанным графиком.

Может кто-нибудь подсказать мне, как сделать это правильно?

1 Ответ

1 голос
/ 24 сентября 2019

Вы можете сделать:

axes = plt.subplots(3,2)
list_df = [df1,df2,...]

for df, ax in zip(list_df, axes):
    df.plot.bar(x='Priority', ax=ax)
    ax.label(...)
    ...

Вы можете сделать это, не разделяя их на разные таблицы.Например:

df = pd.DataFrame([
    [1, 36699, 41926,43171,42773,42418,24555],
    [2, 143314, 145504, 144859, 144707, 150162, 86272]
],
columns=['Priority']+[f'Count in {x}' for x in range(2011,2017)]
)

df.plot.bar(x='Priority', subplots=True, layout=(3,2));

дает:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...