Как сделать гистограмму из трех столбцов из трех наборов словарей с разным количеством и порядком индексов? - PullRequest
1 голос
/ 06 июня 2019

Я пытаюсь создать гистограмму из трех столбцов из некоторых сгенерированных мной словарей Counter, но не могу заставить их работать.

Мне удалось сгенерировать гистограмму одного из словарей Counter.но не все три со словарем столбца в каждом индексе.

f_cond_count=dict(Counter(f_cond_plot))
f_pow_count=dict(Counter(f_pow_plot))
f_mom_count=dict(Counter(f_mom_plot))


print("cond",f_cond_count)
print("pow",f_pow_count)
print("mom",f_mom_count)

df = pd.DataFrame.from_dict((f_cond_count, f_pow_count, f_mom_count), 'index')
df.plot.bar()
plt.show()

В этой строке кода будет напечатано следующее:

cond {0,1: 33, 0,2: 36, 0,30000000000000004: 36, 0,4: 36, 0,5: 39, 0,6: 39,0,7000000000000001: 39, 0,8: 39, 0,9: 39}

pow {0,7000000000000001: 54, 0,8: 81, 0,9: 201}

мама {0,4: 94, 0,5: 27, 0,6:27, 0,7000000000000001: 18, 0,8: 9, 0,9: 9, 0,30000000000000004: 85, 0,2: 67}

И я могу заставить работать один словарь, если буду использовать следующее:

df = pd.DataFrame.from_dict(f_cond_count, 'index')
df.plot.bar()
plt.show()

Где я получаю гистограмму с [0,1, 0,2, 0,30000000004, 0,4 и т. Д.] На оси X и числами [33, 36, 36, 36 и т. Д.] На оси Y.

Iполучаю ошибку: «у объекта« tuple »нет атрибута« значения »», когда я пытаюсь сделать все три, и я не уверен почему.Я также не уверен, будет ли это работать, так как словари имеют разные размеры, а некоторые не имеют записей для определенных индексов.Я пытаюсь создать нечто похожее на решение, опубликованное в этой теме matplotlib: нанести несколько столбцов фрейма данных панд на гистограмму

1 Ответ

0 голосов
/ 06 июня 2019

Вы можете сначала создать DataFrame из трех словарей, используя Series, а затем построить все три гистограммы одновременно.Как вы заметили, значения на x-ticklabels имеют проблемы с плавающей запятой.

Добавляются две последние строки, потому что в противном случае метки-метки показывают проблемы с точностью

df = pd.DataFrame({'cond': pd.Series(f_cond_count), 'powc': pd.Series(f_pow_count), 
                   'mom': pd.Series(f_mom_count) })

ax = df.plot.bar()
labs = [round(float(t.get_text()), 1) for t in ax.axes.get_xmajorticklabels()]
ax.set_xticklabels(labs);

enter image description here

...