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

如何避免Pandas中条形图相互叠加?

解决Pandas条形图叠加问题

你的代码中两次调用plot()时,Pandas默认会复用当前活跃的matplotlib画布,导致两个条形图叠加在一起。以下两种方法可以生成完全独立的条形图:

方法一:每次绘图前创建新画布

通过plt.figure()在每次绘图前生成新的独立画布,每个条形图会显示在单独的窗口中:

import pandas as pd
pd.options.mode.chained_assignment = None  # 关闭链式赋值警告
import matplotlib.pyplot as plt
from openpyxl import load_workbook

def gen(fileIn):
    DF = pd.read_excel(fileIn)
    
    # 绘制第一个条形图
    overall = DF['Awesome'].value_counts(normalize=True)
    plt.figure(figsize=(10,5))  # 创建新画布
    overall.plot(kind='bar')
    plt.title('Awesome 列相对频率')  # 可选:添加标题区分图形
    
    # 绘制第二个条形图
    spec = DF['Not Awesome'].value_counts(normalize=True)
    plt.figure(figsize=(10,5))  # 创建另一个新画布
    spec.plot(kind='bar', color='red')
    plt.title('Not Awesome 列相对频率')  # 可选:添加标题区分图形
    
    plt.show()  # 显示所有生成的图形

gen("my file path")

方法二:使用子图布局(同一窗口显示独立图形)

如果希望在同一个窗口中并排展示两个独立条形图,可以用plt.subplots创建子图布局,指定每个条形图对应的轴对象:

import pandas as pd
pd.options.mode.chained_assignment = None
import matplotlib.pyplot as plt
from openpyxl import load_workbook

def gen(fileIn):
    DF = pd.read_excel(fileIn)
    
    # 创建1行2列的子图布局,获取画布和两个轴对象
    fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(15,5))
    
    # 在第一个轴上绘制条形图
    overall = DF['Awesome'].value_counts(normalize=True)
    overall.plot(kind='bar', ax=ax1)
    ax1.set_title('Awesome 列相对频率')
    
    # 在第二个轴上绘制条形图
    spec = DF['Not Awesome'].value_counts(normalize=True)
    spec.plot(kind='bar', color='red', ax=ax2)
    ax2.set_title('Not Awesome 列相对频率')
    
    plt.tight_layout()  # 自动调整子图间距,避免标题重叠
    plt.show()

gen("my file path")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 05:43:22