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

使用Seaborn绘制多元正态分布报TypeError,请求技术解决方案

解决Seaborn绘制多元正态分布的kdeplot报错问题

错误原因

你遇到的TypeError是因为Seaborn新版本(0.11.0及以后)的kdeplot()不再支持直接传入两个位置参数,必须通过关键字参数x和y来指定二维数据的两个维度。

修复方案

有两种简单的修复方式:

方式1:显式指定x、y关键字参数

直接给kdeplot()传入x和y参数,替换原来的位置参数写法:

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

# 设置均值和协方差
mean1 = [0, 0]
mean2 = [2, 0]
cov1 = [[1, .7], [.7, 1]]
cov2 = [[.5, .4], [.4, .5]]

# 生成多元正态分布数据
data1 = np.random.multivariate_normal(mean1, cov1, size=1000)
data2 = np.random.multivariate_normal(mean2, cov2, size=1000)

plt.figure(figsize=(10,6))

plt.scatter(data1[:,0], data1[:,1], alpha=0.5)
plt.scatter(data2[:,0], data2[:,1], alpha=0.5)

# 修复kdeplot调用方式,指定x和y参数
sns.kdeplot(x=data1[:, 0], y=data1[:, 1], levels=20, linewidths=1, color='k', alpha=0.2)
sns.kdeplot(x=data2[:, 0], y=data2[:, 1], levels=20, linewidths=1, color='k', alpha=0.2)

plt.grid(False)
plt.show()

方式2:将数据转为DataFrame(更符合Seaborn风格)

把numpy数组转为pandas DataFrame,通过data参数传入,同时指定列名:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

mean1 = [0, 0]
mean2 = [2, 0]
cov1 = [[1, .7], [.7, 1]]
cov2 = [[.5, .4], [.4, .5]]

data1 = np.random.multivariate_normal(mean1, cov1, size=1000)
data2 = np.random.multivariate_normal(mean2, cov2, size=1000)

# 转为DataFrame
df1 = pd.DataFrame(data1, columns=['x', 'y'])
df2 = pd.DataFrame(data2, columns=['x', 'y'])

plt.figure(figsize=(10,6))

plt.scatter(df1['x'], df1['y'], alpha=0.5)
plt.scatter(df2['x'], df2['y'], alpha=0.5)

# 使用data参数调用kdeplot
sns.kdeplot(data=df1, x='x', y='y', levels=20, linewidths=1, color='k', alpha=0.2)
sns.kdeplot(data=df2, x='x', y='y', levels=20, linewidths=1, color='k', alpha=0.2)

plt.grid(False)
plt.show()

额外说明

  • 原代码中linewidth参数在新版本Seaborn中应改为linewidths(复数形式),否则会触发警告。
  • 给散点图加上alpha=0.5可以让重叠部分更清晰,提升可视化效果。

内容的提问来源于stack exchange,提问作者Khaled Saleh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 06:30:27