seaborn 绘制多元正态分布

huangapple go评论179阅读模式
英文:

seaborn plot multivariate normal distribution

问题

以下是翻译好的部分:

以下代码尝试使用seaborn绘制多变量正态分布:

  1. # 设置均值和协方差
  2. mean1 = [0, 0]
  3. mean2 = [2, 0]
  4. cov1 = [[1, .7], [.7, 1]]
  5. cov2 = [[.5, .4], [.4, .5]]
  6. # 从均值和协方差生成数据
  7. data1 = np.random.multivariate_normal(mean1, cov1, size=1000)
  8. data2 = np.random.multivariate_normal(mean2, cov2, size=1000)
  9. plt.figure(figsize=(10, 6))
  10. plt.scatter(data1[:, 0], data1[:, 1])
  11. plt.scatter(data2[:, 0], data2[:, 1])
  12. sns.kdeplot(data1[:, 0], data1[:, 1], levels=20, linewidth=10, color='k', alpha=0.2)
  13. sns.kdeplot(data2[:, 0], data2[:, 1], levels=20, linewidth=10, color='k', alpha=0.2)
  14. plt.grid(False)
  15. plt.show()

它引发错误:
TypeError: kdeplot()需要0到1个位置参数,但给定了2个位置参数(以及2个仅关键字参数)。

请问如何解决这个问题?最好的问候。

英文:

The following code tries to plot multivariate normal distribution using seaborn:

  1. # Set the mean and covariance
  2. mean1 = [0, 0]
  3. mean2 = [2, 0]
  4. cov1 = [[1, .7], [.7, 1]]
  5. cov2 = [[.5, .4], [.4, .5]]
  6. # Generate data from the mean and covariance
  7. data1 = np.random.multivariate_normal(mean1, cov1, size=1000)
  8. data2 = np.random.multivariate_normal(mean2, cov2, size=1000)
  9. plt.figure(figsize=(10,6))
  10. plt.scatter(data1[:,0],data1[:,1])
  11. plt.scatter(data2[:,0],data2[:,1])
  12. sns.kdeplot(data1[:, 0], data1[:, 1], levels=20, linewidth=10, color='k', alpha=0.2)
  13. sns.kdeplot(data2[:, 0], data2[:, 1], levels=20, linewidth=10, color='k', alpha=0.2)
  14. plt.grid(False)
  15. plt.show()

it raises error:
TypeError: kdeplot() takes from 0 to 1 positional arguments but 2 positional arguments (and 2 keyword-only arguments) were given

Kindy advise how can this be achieved?
Best regards

答案1

得分: 1

错误告诉您问题的确切原因。请查看文档中的函数签名:

  1. seaborn.kdeplot(data=None, *, x=None, y=None, ...)

data 可以作为关键字参数或位置参数传递,而在 * 之后的参数仅限于关键字参数。因此,您应该明确指定 x=y=

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. import seaborn as sns
  4. # 设置均值和协方差
  5. mean1 = [0, 0]
  6. mean2 = [2, 0]
  7. cov1 = [[1, .7], [.7, 1]]
  8. cov2 = [[.5, .4], [.4, .5]]
  9. # 从均值和协方差生成数据
  10. data1 = np.random.multivariate_normal(mean1, cov1, size=1000)
  11. data2 = np.random.multivariate_normal(mean2, cov2, size=1000)
  12. plt.figure(figsize=(10, 6))
  13. plt.scatter(data1[:, 0], data1[:, 1])
  14. plt.scatter(data2[:, 0], data2[:, 1])
  15. sns.kdeplot(x=data1[:, 0], y=data1[:, 1], levels=20, linewidth=10, color='k', alpha=0.2)
  16. sns.kdeplot(x=data2[:, 0], y=data2[:, 1], levels=20, linewidth=10, color='k', alpha=0.2)
  17. plt.grid(False)
  18. plt.show()
英文:

The error tells you exactly what the problem is. Take a look at the function signature in the documentation:

  1. seaborn.kdeplot(data=None, *, x=None, y=None, ...)

data can be passed as kwarg or positional argument, whereas arguments after * are kwargs only. You should therefore specify x= and y=:

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. import seaborn as sns
  4. # Set the mean and covariance
  5. mean1 = [0, 0]
  6. mean2 = [2, 0]
  7. cov1 = [[1, .7], [.7, 1]]
  8. cov2 = [[.5, .4], [.4, .5]]
  9. # Generate data from the mean and covariance
  10. data1 = np.random.multivariate_normal(mean1, cov1, size=1000)
  11. data2 = np.random.multivariate_normal(mean2, cov2, size=1000)
  12. plt.figure(figsize=(10,6))
  13. plt.scatter(data1[:,0],data1[:,1])
  14. plt.scatter(data2[:,0],data2[:,1])
  15. sns.kdeplot(x=data1[:, 0], y=data1[:, 1], levels=20, linewidth=10, color='k', alpha=0.2)
  16. sns.kdeplot(x=data2[:, 0], y=data2[:, 1], levels=20, linewidth=10, color='k', alpha=0.2)
  17. plt.grid(False)
  18. plt.show()

huangapple
  • 本文由 发表于 2023年6月22日 15:31:32
  • 转载请务必保留本文链接:https://go.coder-hub.com/76529518.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定