Bagaimana untuk Mencipta Plot Bar Bertindan Berkelompok dalam Pandas dan Matplotlib?

Linda Hamilton
Lepaskan: 2024-11-03 10:51:02
asal
622 orang telah melayarinya

How to Create Clustered Stacked Bar Plots in Pandas and Matplotlib?

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=&quot;multiple stacked bar plot&quot;):
    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=&quot;bar&quot;,
                      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(&quot;/&quot; * 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=&quot;gray&quot;, hatch=&quot;/&quot; * 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>
Salin selepas log masuk

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=[&quot;A&quot;, &quot;B&quot;, &quot;C&quot;, &quot;D&quot;],
                   columns=[&quot;I&quot;, &quot;J&quot;, &quot;K&quot;, &quot;L&quot;, &quot;M&quot;])
df2 = pd.DataFrame(np.random.rand(4, 5),
                   index=[&quot;A&quot;, &quot;B&quot;, &quot;C&quot;, &quot;D&quot;],
                   columns=[&quot;I&quot;, &quot;J&quot;, &quot;K&quot;, &quot;L&quot;, &quot;M&quot;])
df3 = pd.DataFrame(np.random.rand(4, 5),
                   index=[&quot;A&quot;, &quot;B&quot;, &quot;C&quot;, &quot;D&quot;], 
                   columns=[&quot;I&quot;, &quot;J&quot;, &quot;K&quot;, &quot;L&quot;, &quot;M&quot;])

# plot clustered stacked bar
plot_clustered_stacked([df1, df2, df3], [&quot;df1&quot;, &quot;df2&quot;, &quot;df3&quot;])</code>
Salin selepas log masuk

Ciri Tambahan

Anda boleh menyesuaikan warna bar dengan menghantar hujah cmap:

<code class="python">plot_clustered_stacked([df1, df2, df3], [&quot;df1&quot;, &quot;df2&quot;, &quot;df3&quot;], cmap=plt.cm.viridis)</code>
Salin selepas log masuk

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!

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