使用Matplotlib保存正负情感词云时仅保留最后一张图的问题求助
问题解决:词云保存重复覆盖的问题
问题原因
你的代码不管传入的label是1还是0,都用同一个固定文件名airasia_negcloud.png保存图片,第二次生成的负面词云直接覆盖了第一次的正面词云。加上你期望生成两个独立文件但代码未做区分,才会出现“正面词云图片空白”的情况(实际是被覆盖,或是你找错了对应文件)。
修复后的代码
TEXT_COLUMN = 'pre_process' TARGET_COLUMN = 'label' def visualize(label): words = '' # 根据label区分情感,生成对应文件名和标题 if label == 1: sentiment_tag = 'pos' cloud_title = '正面情感词云' else: sentiment_tag = 'neg' cloud_title = '负面情感词云' # 拼接对应情感的文本内容 for msg in data[data[TARGET_COLUMN] == label][TEXT_COLUMN]: msg = msg.lower() words += msg + ' ' # 生成并展示词云 wordcloud = WordCloud(width=600, height=600).generate(words) plt.imshow(wordcloud) plt.axis('off') plt.title(cloud_title) # 动态生成文件名,避免覆盖 plt.savefig(f'static/airasia_{sentiment_tag}cloud.png', transparent=True) plt.show() plt.clf() # 生成两个独立词云 visualize(1) visualize(0)
关键改动说明
- 动态文件名:根据
label生成不同的保存路径,正面词云存为airasia_poscloud.png,负面词云存为airasia_negcloud.png,彻底解决文件覆盖问题。 - 区分标题:可视化窗口的标题随情感类型变化,更容易识别当前展示的词云类型。
- 保存时机正确:
plt.savefig在plt.show()之前调用,确保保存的是完整生成的词云(plt.show()执行后画布会被清空,晚保存会得到空白图片)。
修改后运行代码,就能在static文件夹下得到两个独立的词云图片,不会再出现覆盖或空白的情况。
内容的提问来源于stack exchange,提问作者Ain Nabilah
相关产品推荐
相关产品推荐

