Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mencipta Plot Bar Bersusun Berkelompok dalam Python dengan Pandas dan Matplotlib?

Bagaimana untuk Mencipta Plot Bar Bersusun Berkelompok dalam Python dengan Pandas dan Matplotlib?

Linda Hamilton
Linda Hamiltonasal
2024-11-02 12:46:30279semak imbas

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

Mencipta Plot Bar Bertindan Berkelompok

Masalah:

Anda mempunyai berbilang bingkai data dengan lajur dan indeks yang sama dan ingin buat plot bar bertindan dengan data daripada setiap bingkai data dikelompokkan bersama.

Penyelesaian menggunakan Panda dan Matplotlib:

  1. Gabungkan bingkai data menjadi satu bingkai data .
  2. Gunakan fungsi plot_clustered_stacked() untuk mencipta plot bar bertindan. Fungsi ini mengambil hujah berikut:

    • dfall: Senarai bingkai data untuk diplot.
    • label: Senarai nama untuk bingkai data (pilihan).
    • tajuk: Tajuk plot (pilihan).
    • H: Corak penetasan untuk digunakan bagi setiap bingkai data (pilihan).

Kod:

<code class="python">import pandas as pd
import matplotlib.cm as cm
import numpy as np
import matplotlib.pyplot as plt

def plot_clustered_stacked(dfall, labels=None, title=&quot;multiple stacked bar plot&quot;,  H=&quot;/&quot;, **kwargs):
    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,
                      **kwargs)  # make bar plots

    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(H * 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=H * i))

    l1 = axe.legend(h[:n_col], l[:n_col], loc=[1.01, 0.5])
    if labels is not None:
        l2 = plt.legend(n, labels, loc=[1.01, 0.1])
    axe.add_artist(l1)
    return axe

# 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),</code>

Atas ialah kandungan terperinci Bagaimana untuk Mencipta Plot Bar Bersusun Berkelompok dalam Python dengan Pandas dan Matplotlib?. 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