调用sns.pairplot触发StopIteration错误及Matplotlib警告的解决求助
问题解决:sns.pairplot触发Matplotlib弃用警告与StopIteration错误
错误原因分析
1. Matplotlib弃用警告
Matplotlib 3.6之后不再推荐使用内置的"seaborn"样式,因为其样式定义和seaborn官方维护的版本不一致,官方建议直接使用seaborn的API设置样式。
2. StopIteration错误
sns.pairplot默认会对DataFrame中所有列生成两两关系图,但你的数据包含字符串类型的Name列,该列无法生成对角线的直方图,进而触发迭代器空值的StopIteration错误。
修复后的代码
import matplotlib.pyplot as plt import seaborn as sns import pandas as pd # 替换弃用的Matplotlib seaborn样式,改用seaborn官方样式设置 sns.set_style("whitegrid") # 可选样式:whitegrid、darkgrid、white、dark等 data = {"Name":["Thiam","Ennis-Hill","Theisen Eaton","Ikauniece-Admidina","Schafer","Johnson-Thompson","Rodriguez","Zsivoczky-Farkas","Oeser","Vetter"], "hurdles":[13.56,12.84,13.18,13.33,13.12,13.48,13.61,13.79,13.69,13.47], "highjump":[1.98,1.89,1.86,1.77,1.83,1.98,1.86,1.86,1.86,1.77], "shotput":[14.91,13.86,13.45,13.52,14.57,11.68,13.69,14.39,14.28,14.78], "run200m":[25.1,23.49,24.18,23.76,23.99,23.26,24.26,25.38,24.99,23.93], "longjump":[6.58,6.34,6.48,6.12,6.2,6.51,6.25,6.31,6.1,6.1], "javelin":[53.13,46.06,47.36,55.93,47.99,36.36,48.89,48.07,47.22,48.42], "run800m":[136.5,129.1,129.5,129.4,136.5,130.5,134.7,131.8,133.8,137.7]} hept = pd.DataFrame(data) # 方法1:自动筛选所有数值列进行pairplot numeric_cols = hept.select_dtypes(include=['number']).columns sns.pairplot(hept, vars=numeric_cols) # 方法2:手动排除Name列 # sns.pairplot(hept.drop(columns=['Name'])) plt.show() # 显式调用确保图像在VS Code中正常显示
关键修改说明
- 移除
plt.style.use("seaborn"),改用sns.set_style()设置seaborn官方样式,彻底消除弃用警告。 - 在
sns.pairplot中指定仅处理数值列(两种方法二选一),避免非数值列导致的迭代错误。 - 添加
plt.show(),确保图像在VS Code环境中正常渲染显示。
内容的提问来源于stack exchange,提问作者dollar bill
相关产品推荐
相关产品推荐

