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
Lepaskan: 2024-12-01 06:25:14
asal
710 orang telah melayarinya

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')
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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 terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan