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

