Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Menambah Label Kumpulan pada Carta Bar Matplotlib?
Apabila memplot data dalam bentuk carta bar menggunakan matplotlib, selalunya wajar untuk membezakan antara kumpulan data yang berbeza. Struktur data mungkin menyerupai yang berikut:
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} } }
Output yang diingini, diwakili sebagai imej, ialah:
[Imej menunjukkan carta bar dengan kumpulan berlabel]
Memandangkan tiada penyelesaian terbina dalam untuk menambah label kumpulan dalam matplotlib, pelaksanaan tersuai boleh dicipta:
#!/usr/bin/env python from matplotlib import pyplot as plt def mk_groups(data): try: newdata = data.items() except: return 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 def add_line(ax, xpos, ypos): line = plt.Line2D([xpos, xpos], [ypos + .1, ypos], transform=ax.transAxes, color='black') line.set_clip_on(False) ax.add_line(line) 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 if __name__ == '__main__': 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) fig.savefig('label_group_bar_example.png')
Fungsi mk_groups menukar data kepada format yang sesuai untuk mencipta carta. add_line bertanggungjawab untuk menambah garis menegak pada subplot pada kedudukan yang ditentukan. Fungsi label_group_bar menjana carta bar dengan label kumpulan di bawah.
Hasil pelaksanaan ini ialah carta bar dengan kumpulan yang dilabel dengan jelas:
[Imej menunjukkan carta bar dengan kumpulan berlabel]
Atas ialah kandungan terperinci Bagaimana untuk Menambah Label Kumpulan pada Carta Bar Matplotlib?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!