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
Barbara StreisandOriginal
2024-12-01 06:25:14782Durchsuche

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')

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!

Stellungnahme:
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