如何在seaborn factorplot中分组数据?能否仅用其合并4个月数据?
能不能仅靠
factorplot实现每4个月合并分组? 答案是不行。factorplot(现在Seaborn官方更推荐用catplot替代它,因为前者已经被标记为过时了)的核心是基于你传入的x列的现有分类值来绘制图表,它本身没有内置的时间分组聚合功能——你得先对数据做预处理,把年月数据转换成每4个月的分组,再喂给绘图函数。
下面是具体的实现步骤:
1. 先把年月列转成时间格式
首先确保你的CREATED_AT1是datetime类型,如果还不是的话,先做转换:
import pandas as pd import seaborn as sns import matplotlib.pyplot as plt df_kw_mentions['CREATED_AT1'] = pd.to_datetime(df_kw_mentions['CREATED_AT1'])
2. 生成每4个月的分组并聚合数据
我们需要先把数据按每4个月+KW分组,计算每个分组的总count。这里用pd.Grouper来处理时间分组最方便:
# 按每4个月和KW分组,聚合count的总和 grouped_df = df_kw_mentions.groupby( [pd.Grouper(key='CREATED_AT1', freq='4M'), 'KW'] )['count'].sum().reset_index() # 把时间分组转换成易读的标签,比如"2020-01 to 2020-04" grouped_df['4month_period'] = grouped_df['CREATED_AT1'].dt.strftime('%Y-%m') + ' to ' + \ (grouped_df['CREATED_AT1'] + pd.DateOffset(months=3)).dt.strftime('%Y-%m')
3. 用catplot(或factorplot)绘制图表
现在用处理好的分组数据绘图,这里推荐用catplot(factorplot用法完全一样,只是函数名不同):
sns.set_style("white") g = sns.catplot( x="4month_period", y="count", hue='KW', data=grouped_df, height=5, aspect=2, palette="GnBu_d", kind='bar' # kind参数可以选你需要的图表类型,比如point、bar等 ) plt.xticks(rotation=45, ha='right') # 旋转X轴标签并右对齐,更易读 g.set(xlabel='4-Month Period', ylabel='Count') plt.tight_layout() # 自动调整布局,避免标签被截断 plt.show()
补充说明
如果你坚持要用factorplot,只需要把上面的sns.catplot换成sns.factorplot就行,但还是建议迁移到catplot——Seaborn官方已经不再对factorplot做更新维护了。
内容的提问来源于stack exchange,提问作者sheetal_158
相关产品推荐
相关产品推荐

