处理Twitter情感数据集时Matplotlib饼图标签与数值不匹配问题
问题原因
标签错位的核心是两个方法返回的序列顺序不一致:
tweets_df["twt_sentiment"].unique()按值在数据集里首次出现的顺序返回标签- 默认
value_counts()按计数值降序返回统计结果,就算添加sort=False也只是按值的首次出现顺序倒排,依然不能保证和unique的顺序完全匹配
修改后的代码
sns.set(font_scale=1.5) plt.style.use("seaborn-poster") # 先剔除情感字段为空的无效记录 tweets_df = tweets_df.dropna(subset=['twt_sentiment']) fig, axes = plt.subplots(1, 2, figsize=(20, 10), dpi=100) # 柱状图展示数量分布 sns.countplot(x = tweets_df["twt_sentiment"], ax=axes[0]) # 同步获取统计值和对应标签,避免顺序错位 sentiment_stat = tweets_df["twt_sentiment"].value_counts() # 饼图展示占比分布 axes[1].pie(sentiment_stat.values, autopct="%1.0f%%", labels=sentiment_stat.index, startangle=90, explode=tuple([0.1] * len(sentiment_stat))) fig.suptitle("Distribution of Tweets", fontsize=20) plt.show()
修改说明
- 新增空值过滤逻辑,避免
twt_sentiment为NaN的无效记录干扰统计结果 - 直接将
value_counts()的统计结果存入变量,同步取数值和对应索引作为饼图的输入,保证标签和数值完全匹配 - 补全
plt.style.use的前缀plt.,适配标准matplotlib导入规则 - 给countplot补充
x=参数,适配高版本seaborn的传参要求
内容的提问来源于stack exchange,提问作者armyamy
相关产品推荐
相关产品推荐

