You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Pandas在同图绘制多类型推文生命周期分布

多类型推文生命周期同图绘制方案

你的数据中type列为多标签0/1标记,单条推文可同时归属多个类型,不需要做额外的表结构转换,沿用你原有全量分布的分箱逻辑,逐类统计后在同一坐标系绘图即可。

  • 核心要求:所有类型必须使用完全一致的分箱边界,保证x轴区间对齐,避免分布对比失真
  • 统计规则:跨类型归属的推文会在对应类型的计数中分别统计,符合多标签数据的分布统计逻辑,无需额外去重

第一步:固定统一分箱规则

和你原有代码的分箱逻辑保持一致,补充分箱上界避免最大值被截断,同时提前给所有数据打好分箱标签:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 计算分箱边界,3小时为步长
max_lifetime = df['lifetime_hours'].max().astype(int)
bins = range(0, max_lifetime + 3, 3)
# 给全量数据打统一分箱标签
df['lifetime_bin'] = pd.cut(df['lifetime_hours'], bins, include_lowest=True)

第二步:逐类型统计分箱内推文数量

遍历所有type列,筛选当前类型下的所有推文,统计每个生命周期分箱内的样本量,合并为统计宽表:

type_list = ['type1', 'type2', 'type3', 'type4']
bin_count = pd.DataFrame()

for t in type_list:
    # 筛选属于当前类型的样本,按分箱排序计数
    t_count = df[df[t] == 1]['lifetime_bin'].value_counts().sort_index()
    bin_count[t] = t_count

# 空值填0,代表对应分箱内无该类型推文
bin_count = bin_count.fillna(0).astype(int)

第三步:绘制同框分组柱状图

直接基于统计表绘制分组柱状图,调整布局避免标签重叠:

plt.figure(figsize=(20, 6))
bin_count.plot(kind='bar', width=0.85, ax=plt.gca())

plt.xlabel('Tweets Lifetime(hours)')
plt.ylabel('Number of Tweets Active')
plt.title('Distribution of Tweets Lifetime by Type')
plt.legend(title='Tweet Type')
plt.xticks(rotation=45, ha='right')
plt.tight_layout()
plt.show()

可选优化:密度曲线对比

如果觉得分组柱状图视觉上太拥挤,也可以叠加核密度估计曲线,更直观对比不同类型推文的生命周期集中区间:

plt.figure(figsize=(20,4))
for t in type_list:
    df[df[t] == 1]['lifetime_hours'].plot(kind='kde', label=t, linewidth=2)

plt.xlabel('Tweets Lifetime(hours)')
plt.ylabel('Density')
plt.title('Lifetime Density Distribution by Tweet Type')
plt.xlim(0, max_lifetime)
plt.legend()
plt.tight_layout()
plt.show()

注意:如果需要绘制归一化的频率分布而非绝对计数,只需要在统计计数时除以对应类型的总推文量即可,分箱逻辑不需要调整。

内容的提问来源于stack exchange,提问作者mOna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 16:18:21