首页 > 后端开发 > Python教程 > 如何使用 Pandas 和 Matplotlib 在 Python 中创建聚类堆积条形图?

如何使用 Pandas 和 Matplotlib 在 Python 中创建聚类堆积条形图?

Linda Hamilton
发布: 2024-11-02 12:46:30
原创
360 人浏览过

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

创建聚类堆叠条形图

问题:

您有多个具有相同列和索引的数据框,并且想要创建一个堆叠条形图,其中每个数据框的数据聚集在一起。

使用 Pandas 和 Matplotlib 的解决方案:

  1. 将数据框合并为单个数据框.
  2. 使用plot_clustered_stacked()函数创建堆叠条形图。此函数采用以下参数:

    • dfall:要绘制的数据框列表。
    • labels:数据框名称列表(可选)。
    • title:绘图的标题(可选)。
    • H:用于每个数据框的填充图案(可选)。

代码:

<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>
登录后复制

以上是如何使用 Pandas 和 Matplotlib 在 Python 中创建聚类堆积条形图?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板