在 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="multiple stacked bar plot"): 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="bar", 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("/" * 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="gray", hatch="/" * 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=["A", "B", "C", "D"], columns=["I", "J", "K", "L", "M"]) df2 = pd.DataFrame(np.random.rand(4, 5), index=["A", "B", "C", "D"], columns=["I", "J", "K", "L", "M"]) df3 = pd.DataFrame(np.random.rand(4, 5), index=["A", "B", "C", "D"], columns=["I", "J", "K", "L", "M"]) # plot clustered stacked bar plot_clustered_stacked([df1, df2, df3], ["df1", "df2", "df3"])</code>
其他功能
您可以通过传递 cmap 参数来自定义条形的颜色:
<code class="python">plot_clustered_stacked([df1, df2, df3], ["df1", "df2", "df3"], cmap=plt.cm.viridis)</code>
结论
此解决方案提供了一种灵活便捷的方法来创建聚类堆积条形图。您可以轻松修改代码以满足数据可视化的特定要求。
以上是如何在 Pandas 和 Matplotlib 中创建聚类堆积条形图?的详细内容。更多信息请关注PHP中文网其他相关文章!