【问题标题】:Pyplot scatterplot interfering with linePyplot散点图干扰线
【发布时间】:2025-06-27 00:00:02
【问题描述】:

所以我有一个数字列表以及这个列表的平均值和标准差。我试图将数字绘制为 x 值,然后在同一张图上绘制列表标准分布,但它们似乎相互干扰。它们单独工作正常。

plt.scatter(class1, [0]*len(class1), marker="x", label="C1", c="black")
plt.xlabel('X')
plt.ylabel('P(X|C)')
plt.title('X vs P(X|C)')
plt.legend()
x = np.linspace(mean1 - 3*std1, mean1 + 3*std1, 100)
plt.plot(x, scipy.stats.norm.pdf(x, mean1, std1))
plt.show()

在同一张图上:

个人:

理想情况下,由于它们涵盖了相同的 x 值,因此两个图只会重叠,但它们似乎被推到一边。

【问题讨论】:

  • 散布值的最小值和最大值是多少?
  • 看起来 x 值不一样...散点图从 x=1.something 开始,PDF 在 -2.4

标签: python matplotlib plot graphing


【解决方案1】:

您的代码有效:

import matplotlib.pyplot as plt
import scipy.stats

class1 = np.random.uniform(-2.4, -1, 100)
mean1 = class1.mean()
std1 = class1.std()

plt.scatter(class1, [0]*len(class1), marker="x", label="C1", c="black")
plt.xlabel('X')
plt.ylabel('P(X|C)')
plt.title('X vs P(X|C)')
plt.legend()
x = np.linspace(mean1 - 3*std1, mean1 + 3*std1, 100)
plt.plot(x, scipy.stats.norm.pdf(x, mean1, std1))
plt.show()

输出:

那么对您的问题的可能解释是,在您的代码中 mean1 实际上并不是 class1 中 x 值列表的平均值。

【讨论】:

  • 原来我的问题在于我的数据预处理,但是您的解决方案指出了我的问题。当我的 class1 列表中的值应该被读取为浮点数时,它们被读取为字符串。谢谢!