>  기사  >  백엔드 개발  >  Pandas 및 Matplotlib에서 클러스터형 누적 막대 그래프를 만드는 방법은 무엇입니까?

Pandas 및 Matplotlib에서 클러스터형 누적 막대 그래프를 만드는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-03 10:51:02618검색

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

Pandas 및 Matplotlib에서 누적 막대 클러스터링

소개

이 문서에서는 다음 문제를 다룹니다. 동일한 인덱스와 열을 공유하는 여러 데이터 프레임에 대해 클러스터된 막대로 누적 막대 그래프를 생성합니다. 목표는 인덱스별로 누적된 막대를 클러스터링하여 시각화의 명확성을 보장하는 것입니다.

Pandas 및 Matplotlib 사용

이 솔루션은 Pandas 및 Matplotlib 라이브러리의 기능을 활용합니다. 코드는 다음과 같습니다.

<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>

이 함수를 사용하려면 데이터 프레임 목록과 레이블, 제목과 같은 선택적 인수를 전달하기만 하면 됩니다. 데이터프레임을 구별하기 위해 해치가 있는 클러스터된 스택 막대를 생성합니다.

다음은 이 함수를 사용하는 예입니다.

<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>

추가 기능

cmap 인수를 전달하여 막대의 색상을 사용자 정의할 수 있습니다.

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

결론

이 솔루션 군집 누적 막대 그래프를 생성하는 유연하고 편리한 방법을 제공합니다. 데이터 시각화의 특정 요구 사항을 충족하도록 코드를 쉽게 수정할 수 있습니다.

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

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