Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah anda boleh menambah label kumpulan pada carta bar dalam Matplotlib menggunakan fungsi tersuai?

Bagaimanakah anda boleh menambah label kumpulan pada carta bar dalam Matplotlib menggunakan fungsi tersuai?

Barbara Streisand
Barbara Streisandasal
2024-12-01 06:25:14828semak imbas

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

Menambahkan Label Kumpulan pada Carta Bar

Dalam Matplotlib, menambahkan label kumpulan pada carta bar boleh meningkatkan kebolehbacaannya dan memberikan gambaran visual yang jelas tentang struktur data. Berikut ialah penyelesaian tersuai untuk mencapai perkara ini:

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

Penjelasan:

  • Fungsi mk_groups() secara rekursif mengubah kamus input menjadi senarai tupel, di mana setiap tupel mewakili kumpulan bar atau label tanda dan pasangan nilai bar.
  • The Fungsi label_group_bar() menggunakan data yang diubah ini untuk menjana carta bar dengan label kumpulan di bawahnya.
  • Fungsi tambahan, add_line(), digunakan untuk mencipta garis menegak yang memisahkan label kumpulan.
  • Contoh menunjukkan cara membuat carta bar dengan data terkumpul menggunakan penyelesaian tersuai ini.

Pendekatan ini menyediakan cara yang mudah untuk menambah label kumpulan kepada carta bar dalam Matplotlib, membolehkan visualisasi dan tafsiran data dipertingkatkan.

Atas ialah kandungan terperinci Bagaimanakah anda boleh menambah label kumpulan pada carta bar dalam Matplotlib menggunakan fungsi tersuai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:Potong lebihan (anggaran)Artikel seterusnya:Potong lebihan (anggaran)