设置plt.ylim后Matplotlib-Seaborn图表显示空白的问题
解决设置plt.ylim后Seaborn条形图空白的问题
你编写的Python代码用于统计Netflix数据集的空值并绘制条形图,但设置plt.ylim(1,3000)后图表显示空白,未设置时可正常显示。
你的代码如下:
import pandas as pd import tkinter import matplotlib.pyplot as plt import matplotlib import seaborn as sn data= pd.read_csv(r'C:\Users\AmitSatappa\Desktop\praticalone\netflix_titles.csv',encoding='cp1252') matplotlib.use('TkAgg') duplicate= data[data.duplicated()] data.drop_duplicates(inplace=True) new_data= data[data.duplicated()] nullvalue = data.isnull() plt.ylim(1,3000) sn.barplot(nullvalue) plt.show()
问题原因
- 绘图与轴范围设置顺序错误:先设置y轴范围再调用
sn.barplot(),Seaborn绘图时会自动根据数据调整轴范围,预设的ylim会被覆盖,若数据范围不在你设定的区间内,就会显示空白。 - 空值数据处理不直观:直接将布尔类型的
nullvalue传给sn.barplot(),Seaborn默认对每列布尔值求和(True=1,False=0),这种传递方式容易导致轴范围判断偏差。 - ylim下限设置不合理:若部分列空值数量为0,
ylim(1,3000)会将这些列的条形完全排除在可视范围外,极端情况下会出现全空白。
修复方案
调整代码顺序,先绘图再设置轴范围,同时优化空值数据的处理逻辑:
import pandas as pd import tkinter import matplotlib.pyplot as plt import matplotlib import seaborn as sn data = pd.read_csv(r'C:\Users\AmitSatappa\Desktop\praticalone\netflix_titles.csv', encoding='cp1252') matplotlib.use('TkAgg') # 去重操作(原代码中new_data变量未使用,可按需删除) data.drop_duplicates(inplace=True) # 直接计算每列的空值数量,明确统计目标 null_counts = data.isnull().sum() # 先绘制条形图,明确指定x、y轴数据 sn.barplot(x=null_counts.index, y=null_counts.values) # 根据实际数据范围设置y轴范围,留出顶部空间避免截断 plt.ylim(0, null_counts.max() + 100) # 可选:旋转x轴标签,避免列名重叠 plt.xticks(rotation=45) plt.show()
关键调整点
- 先调用
sn.barplot()绘制图表,再设置plt.ylim(),确保轴范围适配已生成的图表数据。 - 使用
data.isnull().sum()直接获取每列空值数量,传递参数时明确指定x、y轴,避免Seaborn自动处理数据时的歧义。 - 基于实际空值数量的最大值设置ylim,添加额外空间保证所有条形都能正常显示。
内容的提问来源于stack exchange,提问作者amit sk
相关产品推荐
相关产品推荐

