Mengelompokkan Bar Bertindan dalam Panda dan Matplotlib
Pengenalan
Artikel ini menangani masalah mencipta plot bar bertindan dengan bar berkelompok untuk berbilang bingkai data yang berkongsi indeks dan lajur yang sama. Matlamatnya adalah untuk mempunyai bar bertindan berkelompok bagi setiap indeks, memastikan kejelasan dalam visualisasi.
Menggunakan Pandas dan Matplotlib
Penyelesaian itu memanfaatkan keupayaan pustaka Pandas dan Matplotlib. Berikut ialah kodnya:
<code class="python">import pandas as pd import matplotlib.cm as cm import matplotlib.pyplot as plt def plot_clustered_stacked(dfall, labels=None, title="multiple stacked bar plot"): n_df = len(dfall) n_col = len(dfall[0].columns) n_ind = len(dfall[0].index) axe = plt.subplot(111) for df in dfall: # for each data frame axe = df.plot(kind="bar", linewidth=0, stacked=True, ax=axe, legend=False, grid=False) h,l = axe.get_legend_handles_labels() # get the handles we want to modify for i in range(0, n_df * n_col, n_col): # len(h) = n_col * n_df for j, pa in enumerate(h[i:i+n_col]): for rect in pa.patches: # for each index rect.set_x(rect.get_x() + 1 / float(n_df + 1) * i / float(n_col)) rect.set_hatch("/" * int(i / n_col)) #edited part rect.set_width(1 / float(n_df + 1)) axe.set_xticks((np.arange(0, 2 * n_ind, 2) + 1 / float(n_df + 1)) / 2.) axe.set_xticklabels(df.index, rotation = 0) axe.set_title(title) # Add invisible data to add another legend n=[] for i in range(n_df): n.append(axe.bar(0, 0, color="gray", hatch="/" * i)) l1 = axe.legend(h[:n_col], l[:n_col]) if labels is not None: l2 = plt.legend(n, labels) axe.add_artist(l1) return axe</code>
Untuk menggunakan fungsi ini, cuma masukkan senarai bingkai data dan argumen pilihan seperti label dan tajuk. Ia akan menghasilkan bar bertindan berkelompok dengan penetasan untuk membezakan bingkai data.
Contoh
Berikut ialah contoh menggunakan fungsi ini:
<code class="python"># create fake dataframes df1 = pd.DataFrame(np.random.rand(4, 5), index=["A", "B", "C", "D"], columns=["I", "J", "K", "L", "M"]) df2 = pd.DataFrame(np.random.rand(4, 5), index=["A", "B", "C", "D"], columns=["I", "J", "K", "L", "M"]) df3 = pd.DataFrame(np.random.rand(4, 5), index=["A", "B", "C", "D"], columns=["I", "J", "K", "L", "M"]) # plot clustered stacked bar plot_clustered_stacked([df1, df2, df3], ["df1", "df2", "df3"])</code>
Ciri Tambahan
Anda boleh menyesuaikan warna bar dengan menghantar hujah cmap:
<code class="python">plot_clustered_stacked([df1, df2, df3], ["df1", "df2", "df3"], cmap=plt.cm.viridis)</code>
Kesimpulan
Penyelesaian ini menyediakan cara yang fleksibel dan mudah untuk mencipta plot bar bertindan berkelompok. Anda boleh mengubah suai kod dengan mudah untuk memenuhi keperluan khusus visualisasi data anda.
Atas ialah kandungan terperinci Bagaimana untuk Mencipta Plot Bar Bertindan Berkelompok dalam Pandas dan Matplotlib?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!