Python绘制多分类数据:对比7月、10月各Cluster对应的Count数值
7月与10月Cluster分布对比Python可视化实现
前置依赖
需要先安装用到的第三方库:pip install pandas matplotlib seaborn
实现逻辑
- 先对原始数据做聚合处理:原始数据中同月份同Cluster存在多条Count记录,先求和得到每个月份每个Cluster的总Count值,不需要聚合可以跳过该步骤
- 可根据需求选择两种可视化形式:
- 分组柱状图:相同Cluster的两个月份数值并排展示,方便直接对比同一类别的月度差异
- 分面柱状图:每个月份单独一个子图展示全部Cluster的分布,方便看单月的整体分布情况
完整代码
import pandas as pd import matplotlib.pyplot as plt import seaborn as sns # 1. 加载并处理数据 raw_data = [ [7, 'Linux', 42], [7, 'Linux', 56], [7, 'Pct', 6], [7, 'Pct(C)', 11], [7, 'Memory', 28], [10, 'Latency', 73], [10, 'Linux', 47], [10, 'Pct', 21], [10, 'Pct(C)', 18], [10, 'Swap', 41], [10, 'Protection ', 509] ] df = pd.DataFrame(raw_data, columns=['Month', 'Cluster', 'Count']) # 聚合同月份同Cluster的Count总和,若不需要聚合可删除下一行 df_agg = df.groupby(['Month', 'Cluster'], as_index=False)['Count'].sum() df_agg['Month'] = df_agg['Month'].astype(str) # 2. 可视化方案1:分组柱状图(适合同Cluster跨月对比) plt.figure(figsize=(12, 6)) sns.barplot(data=df_agg, x='Cluster', y='Count', hue='Month', palette='Set2') plt.title('7月与10月各Cluster Count对比', fontsize=14) plt.xlabel('Cluster类别', fontsize=12) plt.ylabel('总Count数值', fontsize=12) plt.xticks(rotation=45) # 若Protection数值过大导致其他类别对比不明显,可开启下方对数坐标配置 # plt.yscale('log') plt.tight_layout() plt.show() # 3. 可视化方案2:分面柱状图(适合看单月分布) g = sns.FacetGrid(df_agg, col='Month', height=5, aspect=1.2) g.map( sns.barplot, 'Cluster', 'Count', palette='Set3', order=df_agg['Cluster'].unique() ) g.set_xticklabels(rotation=45) g.set_axis_labels('Cluster类别', '总Count数值') g.fig.suptitle('7月与10月各Cluster分布', y=1.05) plt.tight_layout() plt.show()
可选调整项
- 可通过修改
palette参数调整配色,修改figsize调整画布大小 - 可自行添加数值标签,在柱状图上显示具体Count数值
内容的提问来源于stack exchange,提问作者Rehoboth
相关产品推荐
相关产品推荐

