如何避免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
相关产品推荐
相关产品推荐

