Maison > développement back-end > Tutoriel Python > Comment ajouter des étiquettes de groupe aux graphiques à barres dans Matplotlib à l'aide de fonctions personnalisées ?

Comment ajouter des étiquettes de groupe aux graphiques à barres dans Matplotlib à l'aide de fonctions personnalisées ?

Barbara Streisand
Libérer: 2024-12-01 06:25:14
original
709 Les gens l'ont consulté

How can you add group labels to bar charts in Matplotlib using custom functions?

Ajout d'étiquettes de groupe aux graphiques à barres

Dans Matplotlib, l'ajout d'étiquettes de groupe aux graphiques à barres peut améliorer leur lisibilité et fournir une représentation visuelle claire de la structure des données. Voici une solution personnalisée pour y parvenir :

# Custom function to group data for bar chart
def mk_groups(data):
    newdata = data.items()
    thisgroup = []
    groups = []
    for key, value in newdata:
        newgroups = mk_groups(value)
        if newgroups is None:
            thisgroup.append((key, value))
        else:
            thisgroup.append((key, len(newgroups[-1])))
            if groups:
                groups = [g + n for n, g in zip(newgroups, groups)]
            else:
                groups = newgroups
    return [thisgroup] + groups

# Custom function to label group bars
def label_group_bar(ax, data):
    groups = mk_groups(data)
    xy = groups.pop()
    x, y = zip(*xy)
    ly = len(y)
    xticks = range(1, ly + 1)

    ax.bar(xticks, y, align='center')
    ax.set_xticks(xticks)
    ax.set_xticklabels(x)
    ax.set_xlim(.5, ly + .5)
    ax.yaxis.grid(True)

    scale = 1. / ly
    for pos in xrange(ly + 1):  # change xrange to range for python3
        add_line(ax, pos * scale, -.1)
    ypos = -.2
    while groups:
        group = groups.pop()
        pos = 0
        for label, rpos in group:
            lxpos = (pos + .5 * rpos) * scale
            ax.text(lxpos, ypos, label, ha='center', transform=ax.transAxes)
            add_line(ax, pos * scale, ypos)
            pos += rpos
        add_line(ax, pos * scale, ypos)
        ypos -= .1


# Example usage
data = {'Room A':
                   {'Shelf 1':
                       {'Milk': 10,
                        'Water': 20},
                    'Shelf 2':
                       {'Sugar': 5,
                        'Honey': 6}
                   },
            'Room B':
                   {'Shelf 1':
                       {'Wheat': 4,
                        'Corn': 7},
                    'Shelf 2':
                       {'Chicken': 2,
                        'Cow': 1}
                   }
           }

fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
label_group_bar(ax, data)
fig.subplots_adjust(bottom=0.3)
# Save the plot to a file
fig.savefig('labeled_group_bar_chart.png')
Copier après la connexion

Explication :

  • La fonction mk_groups() transforme récursivement le dictionnaire d'entrée en une liste de tuples, où chaque tuple représente un groupe de barres ou une paire d'étiquettes de tick et de valeurs de barre.
  • La fonction label_group_bar() utilise ces données transformées pour générer le graphique à barres avec les étiquettes de groupe en dessous.
  • Une fonction supplémentaire, add_line(), est utilisée pour créer des lignes verticales qui séparent les étiquettes de groupe.
  • L'exemple montre comment pour créer un graphique à barres avec des données groupées à l'aide de cette solution personnalisée.

Cette approche fournit un moyen simple d'ajouter des étiquettes de groupe aux graphiques à barres dans Matplotlib, permettant une visualisation améliorée des données. et interprétation.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal