Heim > Backend-Entwicklung > Python-Tutorial > Wie können Sie mithilfe benutzerdefinierter Funktionen Gruppenbeschriftungen zu Balkendiagrammen in Matplotlib hinzufügen?

Wie können Sie mithilfe benutzerdefinierter Funktionen Gruppenbeschriftungen zu Balkendiagrammen in Matplotlib hinzufügen?

Barbara Streisand
Freigeben: 2024-12-01 06:25:14
Original
710 Leute haben es durchsucht

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

Hinzufügen von Gruppenbeschriftungen zu Balkendiagrammen

In Matplotlib kann das Hinzufügen von Gruppenbeschriftungen zu Balkendiagrammen deren Lesbarkeit verbessern und eine klare visuelle Darstellung bieten die Datenstruktur. Hier ist eine benutzerdefinierte Lösung, um dies zu erreichen:

# 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')
Nach dem Login kopieren

Erklärung:

  • Die Funktion mk_groups() wandelt das Eingabewörterbuch rekursiv in eine Liste von Tupeln um. wobei jedes Tupel eine Balkengruppe oder ein Tick-Label- und Balkenwertpaar darstellt.
  • Die label_group_bar() Die Funktion verwendet diese transformierten Daten, um das Balkendiagramm mit den Gruppenbeschriftungen darunter zu generieren.
  • Eine zusätzliche Funktion, add_line(), wird verwendet, um vertikale Linien zu erstellen, die die Gruppenbeschriftungen trennen.
  • Das Beispiel zeigt So erstellen Sie mit dieser benutzerdefinierten Lösung ein Balkendiagramm mit gruppierten Daten.

Dieser Ansatz bietet eine einfache Möglichkeit, Gruppenbeschriftungen zu Balkendiagrammen in Matplotlib hinzuzufügen, was eine verbesserte Datenvisualisierung ermöglicht und Interpretation.

Das obige ist der detaillierte Inhalt vonWie können Sie mithilfe benutzerdefinierter Funktionen Gruppenbeschriftungen zu Balkendiagrammen in Matplotlib hinzufügen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage