>  기사  >  백엔드 개발  >  Pandas와 Matplotlib 또는 Seaborn을 사용하여 클러스터된 누적 막대 그래프를 만드는 방법은 무엇입니까?

Pandas와 Matplotlib 또는 Seaborn을 사용하여 클러스터된 누적 막대 그래프를 만드는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-02 11:56:02552검색

How to create clustered stacked bar plots using Pandas and Matplotlib or Seaborn?

군집 누적 막대 그래프 생성

문제:

색인은 동일하지만 열이 다를 수 있는 두 개의 데이터 프레임 df1 및 df2를 고려합니다. 행은 카테고리를 나타내고 각 열은 측정항목을 나타냅니다. 목표는 각 범주의 막대가 함께 그룹화되고 각 데이터 프레임의 막대가 서로 겹쳐지는 클러스터형 누적 막대 그래프를 만드는 것입니다.

Pandas 및 Matplotlib를 사용한 솔루션 :

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

def plot_clustered_stacked(df_list, labels=None, title="Clustered Stacked Bar Plot"):
    n_dataframes = len(df_list)
    n_columns = len(df_list[0].columns) 
    n_index = len(df_list[0].index)
    
    fig, ax = plt.subplots()

    # Iterate through each dataframe
    for i, df in enumerate(df_list):
        # Plot the bars for the current dataframe
        df.plot(kind="bar", 
                 ax=ax, 
                 linewidth=0,
                 stacked=True,
                 legend=False, 
                 grid=False)

    # Adjust the position and width of the bars
    for df, j in zip(df_list, range(n_dataframes)):
        for n, rect in enumerate(ax.patches):
            if rect.get_y() == 0:
                # Stacked bar for dataframe df
                rect.set_x(rect.get_x() + j / float(n_dataframes))
                rect.set_width(1 / float(n_dataframes))

    # Set the x-axis labels and ticks
    ax.set_xticks(np.arange(0, n_index) + 0.5)
    ax.set_xticklabels(df.index)

    # Add a legend for the dataframes
    plt.legend([df.stack(level=0).index[0] for df in df_list], labels)

    # Set the plot title
    ax.set_title(title)

# Create example dataframes
df1 = pd.DataFrame(np.random.rand(4, 3), index=["A", "B", "C", "D"], columns=["x", "y", "z"])
df2 = pd.DataFrame(np.random.rand(4, 3), index=["A", "B", "C", "D"], columns=["x", "y", "z"])

# Plot the clustered stacked bar plot
plot_clustered_stacked([df1, df2], labels=["df1", "df2"])</code>

Seaborn과 Pandas를 사용한 솔루션:

<code class="python">import seaborn as sns

# Concatenate the dataframes into a single dataframe with a wide format
df = pd.concat([df1.reset_index().melt(id_vars=["index"]), 
                 df2.reset_index().melt(id_vars=["index"])])

# Plot the clustered stacked bar plot
g = sns.FacetGrid(data=df, col="variable", hue="index")
g.map_dataframe(sns.barplot, order=df["index"].unique())</code>

위 내용은 Pandas와 Matplotlib 또는 Seaborn을 사용하여 클러스터된 누적 막대 그래프를 만드는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.