Matplotlib: гистограмма с несколькими столбцами

#python #pandas #matplotlib #data-visualization

#python #панды #matplotlib #визуализация данных

Вопрос:

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

 import matplotlib.pyplot as mpl

tags = 'manual (4 serv.)', 'Cromlech (average, 4 serv.)', 'Cromlech (0.925, 4 serv.)', 'Cromlech (0.925 improved, 7 serv.)', 'Cromlech (15 serv.)', 'Pangaea', 'ServiceCutter (4 serv.)'
a = (0.385, 0.4128, 0.406, 0.5394, 0.7674, 0.306, 0.3505)
b = (0.4025, 0.1935, 0.189, 0.189, 0.415, 0.238, 0.1714)
c = (1, 0.3619, 0.5149, 1, 0.4851, 0.4092, 0.4407)
d = (1, 0.3495, 0.4888, 1, 0.4861, 0.4985, 0.5213)
mpl.hist((a, b, c, d), 7, label=("decoupling", "op. cost", "op. similarity", "data similarity"))
mpl.legend()
mpl.xticks((1, 2, 3, 4, 5, 6, 7), (tags))
mpl.show()
 

То, что я пытаюсь сделать, это создать график с 7 точками данных, каждая из которых характеризуется четверкой (развязка, оп. стоимость, оп. сходство, сходство данных). «a, b, c, d» соответственно содержит значение для развязки, оп. затраты…
Я хочу пометить каждую из точек данных одним из тегов в коде.

неправильный график

Я не понимаю, что я делаю не так. Не могли бы вы мне помочь?

Ответ №1:

Похоже, вы хотите создать гистограмму, а не гистограмму.

В этом случае группировка, метки и легенда проще всего, если вы создаете фрейм данных pandas и используете построение pandas (pandas использует matplotlib для построения графика):

 import matplotlib.pyplot as plt
import pandas as pd

tags = ('manual (4 serv.)', 'Cromlech (average, 4 serv.)', 'Cromlech (0.925, 4 serv.)',
        'Cromlech (0.925 improved, 7 serv.)', 'Cromlech (15 serv.)', 'Pangaea', 'ServiceCutter (4 serv.)')
# insert some newlines in the tags to better fit into the plot
tags = [tag.replace(' (', 'n(') for tag in tags]
a = (0.385, 0.4128, 0.406, 0.5394, 0.7674, 0.306, 0.3505)
b = (0.4025, 0.1935, 0.189, 0.189, 0.415, 0.238, 0.1714)
c = (1, 0.3619, 0.5149, 1, 0.4851, 0.4092, 0.4407)
d = (1, 0.3495, 0.4888, 1, 0.4861, 0.4985, 0.5213)
# create a dataframe
df = pd.DataFrame({"decoupling": a, "op. cost": b, "op. similarity": c, "data similarity": d}, index=tags)
df.plot.bar(rot=0, figsize=(12, 5))
plt.tight_layout() # fit labels etc. nicely into the plot
plt.show()
 

график панд

При желании вы можете изменить визуальные аспекты. Вот пример:

 ax = df.plot.bar(rot=0, figsize=(12, 5), width=0.75, cmap='turbo')
for spine in ['top', 'right']:
    ax.spines[spine].set_visible(False)
ax.set_axisbelow(True)
ax.grid(axis='y', color='grey', ls=':')
ax.set_facecolor('beige')
ax.set_ylim(0, 1)
plt.tight_layout()
 

гистограмма панд с измененным визуальным аспектом

Комментарии:

1. Отлично!!! Да, я не очень разбираюсь в данных, поэтому я даже не знал имени lol. Кстати, большое спасибо!