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

如何用Seaborn pairplot展示分类DataFrame?遇"No variables found"错误

问题解决:Seaborn pairplot 报错 "No variables found for grid columns"

错误根因

你用的汽车数据集所有列全是字符串类型的分类变量,但seaborn.pairplot()默认只认数值型变量来生成两两关系网格图,找不到数值变量就会抛出这个错误。另外代码里还有个小坑:你在定义plot函数之前就调用了plot(data1),这会先触发一个“函数未定义”的报错。

两种修复方法

方法1:把分类变量转成数值编码

给分类变量分配对应的数值,让pairplot能识别:

%matplotlib inline
import seaborn as sns
from ipywidgets import interact
import matplotlib.pyplot as plt
import pandas as pd

cars_url = 'http://archive.ics.uci.edu/ml/machine-learning-databases/car/car.data'
cars_columns = ['buying', 'maint', 'doors', 'persons', 'lug_boot', 'safety', 'class']
data = pd.read_csv(cars_url, names = cars_columns)
# 把所有分类列转成数值编码
data_encoded = data.apply(lambda x: pd.factorize(x)[0])

@interact(hue = ['buying', 'maint', 'safety', 'class'])
def plot(hue):
    _ = sns.pairplot(data_encoded, hue=hue)

方法2:换用适合分类变量的可视化工具

如果不想转数据,用专门展示分类变量的图表更合适:

%matplotlib inline
import seaborn as sns
from ipywidgets import interact
import matplotlib.pyplot as plt
import pandas as pd

cars_url = 'http://archive.ics.uci.edu/ml/machine-learning-databases/car/car.data'
cars_columns = ['buying', 'maint', 'doors', 'persons', 'lug_boot', 'safety', 'class']
data = pd.read_csv(cars_url, names = cars_columns)

@interact(x_col = cars_columns[:-1], hue = ['buying', 'class'])
def plot(x_col, hue):
    plt.figure(figsize=(10,6))
    _ = sns.countplot(data=data, x=x_col, hue=hue)
    plt.xticks(rotation=45)

额外提醒

删掉代码里提前写的plot(data1),不然函数还没定义就调用,会先报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 08:35:18