如何简洁创建多组分组直方图?寻求matplotlib批量实现方案
批量绘制按Genre分组的多评分字段直方图
方法1:循环遍历目标评分字段
直接把需要绘制的评分字段做成列表,循环处理每个字段,避免重复写相同的绘图代码:
import matplotlib.pyplot as plt # 列出所有要绘制的评分字段 score_fields = ['comedy_score', 'suspense_score', 'drama_score'] for field in score_fields: # 按genre透视数据并绘制分组直方图,自动带图例 movies.pivot(columns='genre', values=field).plot.hist(title=f'{field} 按 Genre 分布') plt.show()
后续新增评分字段时,只需要往score_fields列表里加字段名就行,不用改绘图逻辑。
方法2:转长格式数据用Seaborn批量生成子图
如果想要更规整的多子图布局,推荐把宽格式数据转成长格式,用Seaborn的分面绘图功能一次性搞定:
import seaborn as sns import matplotlib.pyplot as plt # 将多个评分字段转为「评分类型-分数」的长格式,保留genre分组列 long_movies = movies.melt( id_vars='genre', value_vars=['comedy_score', 'suspense_score', 'drama_score'], var_name='评分类型', value_name='分数' ) # 按评分类型分面,每个面内按genre绘制分组直方图 sns.displot( data=long_movies, x='分数', hue='genre', col='评分类型', kind='hist', multiple='dodge' # 分组直方图并排显示,也可以用'stack'堆叠 ) plt.show()
这种方式会自动生成一个包含所有评分字段的子图网格,每个子图里是对应评分按genre分组的直方图,布局更统一,代码也更简洁。
内容的提问来源于stack exchange,提问作者WriterState
相关产品推荐
相关产品推荐

