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

设置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()

问题原因

  1. 绘图与轴范围设置顺序错误:先设置y轴范围再调用sn.barplot(),Seaborn绘图时会自动根据数据调整轴范围,预设的ylim会被覆盖,若数据范围不在你设定的区间内,就会显示空白。
  2. 空值数据处理不直观:直接将布尔类型的nullvalue传给sn.barplot(),Seaborn默认对每列布尔值求和(True=1,False=0),这种传递方式容易导致轴范围判断偏差。
  3. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 13:36:04