在R中可视化二元变量top10与分类变量label的关系及概率实现
解决方案
步骤1:计算各分类下top10=1的概率
先通过groupby计算每个label类别中top10取1的比例(二元变量的均值即为1的占比,也就是你要的概率):
import pandas as pd # 假设你的DataFrame名为df prob_df = df.groupby('label')['top10'].mean().reset_index() prob_df.columns = ['label', 'top10_prob'] # 重命名列,方便后续绘图
步骤2:可视化展示
方法1:Matplotlib 柱状图
这是最直观的对比方式,能清晰呈现不同分类的概率差异:
import matplotlib.pyplot as plt plt.figure(figsize=(10, 6)) plt.bar(prob_df['label'], prob_df['top10_prob'], color=['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728']) plt.title('各唱片公司作品进入前十的概率') plt.xlabel('唱片公司类别') plt.ylabel('进入前十的概率') plt.ylim(0, 1) # 限定y轴在概率的0-1区间内 plt.xticks(rotation=45) # 旋转x轴标签,避免文字重叠 plt.show()
方法2:Seaborn 柱状图(带置信区间)
如果需要体现概率的统计波动,用seaborn的barplot可以直接展示置信区间(默认95%置信区间,也可改为标准差):
import seaborn as sns plt.figure(figsize=(10, 6)) sns.barplot(data=df, x='label', y='top10', ci='sd') # ci='sd'展示标准差,保留默认则为95%置信区间 plt.title('各唱片公司作品进入前十的概率(带置信区间)') plt.xlabel('唱片公司类别') plt.ylabel('进入前十的概率') plt.ylim(0, 1) plt.xticks(rotation=45) plt.show()
补充优化
- 若想把y轴改为百分比显示,可添加代码:
plt.gca().yaxis.set_major_formatter(plt.FuncFormatter(lambda x, _: f'{x*100:.0f}%')) - 如果你已有导入绘图库的代码,可直接复用,无需重复导入
内容的提问来源于stack exchange,提问作者Nataliia Yefimova
相关产品推荐
相关产品推荐

