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

如何在Python中每行并排展示含子图的两类情感词频图表

问题描述

我希望为每个类别绘制包含正负词的组合图表,目前使用plt.subplot()循环生成每个类别的独立图表。现在需要实现:保持每个类别正负词组合为独立单元的前提下,每行并排显示两个这样的单元。

我尝试过两段代码:

  1. 第一段代码会为每个类别单独生成一个包含正负词的图表,但每个图表单独一行显示;
  2. 第二段代码将所有图表合并到同一个大图中,破坏了“每个类别图表独立”的需求。
解决方案

核心思路是按批次处理类别,每批次取2个类别,为这一批次创建一个包含对应子图的画布,绘制完成后显示该画布,再处理下一批次。这样既保留了每个类别正负词组合的独立性,又实现了每行并排两个单元的效果。

示例代码

import matplotlib.pyplot as plt
import seaborn as sns

# 获取所有类别
categories = results_df['Category'].unique()
# 每批次处理2个类别,控制每行显示数量
batch_size = 2

# 按批次遍历类别
for batch_start in range(0, len(categories), batch_size):
    # 获取当前批次的类别列表
    current_batch = categories[batch_start:batch_start + batch_size]
    # 创建画布:行数为批次内类别数,列数固定为2(正负词各一列)
    fig, axs = plt.subplots(len(current_batch), 2, figsize=(12, 4 * len(current_batch)))
    
    # 处理单类别批次的情况,避免axs维度问题
    if len(current_batch) == 1:
        axs = axs.reshape(1, 2)
    
    # 遍历批次内的每个类别,绘制正负词图表
    for row_num, category in enumerate(current_batch):
        # 绘制正词条形图
        pos_subset = results_df[(results_df['Category'] == category) & (results_df['Sentiment'] == 'Positive')]
        pos_subset = pos_subset.sort_values(by='Frequency', ascending=False)
        ax_pos = axs[row_num, 0]
        sns.barplot(x='Frequency', y='Word', data=pos_subset, color=sns.color_palette('muted')[2], ax=ax_pos)
        ax_pos.set(ylabel='', xlabel='')
        ax_pos.set_title(f'{category} - 高频正词')
        
        # 绘制负词条形图
        neg_subset = results_df[(results_df['Category'] == category) & (results_df['Sentiment'] == 'Negative')]
        neg_subset = neg_subset.sort_values(by='Frequency', ascending=False)
        ax_neg = axs[row_num, 1]
        sns.barplot(x='Frequency', y='Word', data=neg_subset, color=sns.color_palette('muted')[0], ax=ax_neg)
        ax_neg.set(ylabel='', xlabel='')
        ax_neg.set_title(f'{category} - 高频负词')
    
    # 调整布局,避免元素重叠
    plt.subplots_adjust(wspace=0.4, hspace=0.5, top=0.9)
    plt.suptitle('各分类高频情感词统计', fontsize=14)
    plt.tight_layout()
    # 显示当前批次的画布
    plt.show()

代码说明

  • 按batch_size=2分组,每次处理两个类别,生成对应画布,每行显示两个类别单元
  • 每个类别在画布中占据一行,左右分别为正负词图表,保留了原有的组合独立性
  • 自动适配最后一批次类别数不足2的情况,避免索引错误
  • 通过调整figsize和布局参数,保证图表显示美观

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 05:07:35