Как я могу создать панели ошибок с помощью matplotlib, когда я использую метод .group при установке моего x в ax.bar? - PullRequest
0 голосов
/ 20 апреля 2020

Я делаю график с 4 подзаговорами (2x2). Мои данные в настоящее время упорядочены в длинной форме, например:

group score

1       2
1       3
1       2
1       3
2       1
2       4
2       5
2       1
3       2
3       1
3       6
3       4

Я хочу, чтобы на каждом баре была строка ошибок, представляющая стандартную ошибку среднего.

Я пытался поместить значения для yerr, но каждый раз, когда я делаю, я получаю сообщение об ошибке, что их массивы не совпадают по размеру, что, я считаю, связано с тем, что я использовал df.group для моего значения x. Должен ли я делать что-то еще, чтобы обозначить мои х и у? Гистограммы - это то, как я хочу, чтобы они выглядели в данный момент, я просто не могу заставить работать панели ошибок. Что я должен использовать вместо этого?

fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(nrows=2, ncols=2, sharex=False, sharey=True, figsize=(15,7))
ax1.bar(df.group, df["score"], yerr = [?,?])
plt.show()

1 Ответ

0 голосов
/ 20 апреля 2020

Вы не можете напрямую использовать столбец группы. Вы хотите использовать GroupBy(), а затем aggregate для расчета значений, которые вы хотите получить в каждой группе.

d="""group   score

1       2
1       3
1       2
1       3
2       1
2       4
2       5
2       1
3       2
3       1
3       6
3       4"""

df = pd.read_csv(StringIO(d), sep='\\s+')
gr = df.groupby('group')['score'].aggregate(['mean','sem'])

fig, ax = plt.subplots()
ax.bar(x=gr.index, height=gr['mean'], yerr=gr['sem'], capsize=10)
ax.set_xticks(gr.index)

enter image description here

...