python - 线性判别分析后仅绘制了 2 个簇,而不是 3 个

标签 python python-2.7 matplotlib

我无法将所有数据放入图表中。这就是我得到的

click

这就是我需要得到的

click

我正在使用此代码:

import pandas
import matplotlib.pyplot as plt

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
import numpy as np

dataset = np.loadtxt("wine.data.csv", delimiter=",")
print(dataset)
X = dataset[:,1:14]
y = dataset[:,0]
target_names = ['class_0', 'class_1', 'class_2']

lda = LinearDiscriminantAnalysis(n_components=2)
X_lda = lda.fit(X,y).transform(X)
plt.figure()
for c, i, target_name in zip("rgb", [0, 1, 2], target_names):
    plt.scatter(X_lda[y == i, 0], X_lda[y == i, 1], c=c, label=target_name)

plt.show()
plt.plot([-6,2],[-6,4],"k-")
plt.plot([5,0],[-6,4],"k-")
plt.legend()
plt.title('LDA of WINE dataset')
plt.show()

数据集从这里下载WINE dataset 。我也在使用Python 2.7。我对此很陌生,希望得到任何帮助。 预先感谢您!

最佳答案

删除第一个plt.show()

# plt.show() # remove this
plt.plot([-6,2],[-6,4],"k-")
plt.plot([5,0],[-6,4],"k-")
plt.legend()
plt.title('LDA of WINE dataset')
plt.show()

一旦调用 plt.show(),就会生成绘图,并且该行下面的所有代码都将被忽略。

此外,将[0, 1, 2]更改为[1, 2, 3]:

for c, i, target_name in zip("rgb", [1, 2, 3], target_names):
    plt.scatter(X_lda[y == i, 0], X_lda[y == i, 1], c=c, label=target_name)

现在你就得到了你想要的输出。

关于python - 线性判别分析后仅绘制了 2 个簇,而不是 3 个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47672534/

相关文章:

python - Numpy:将散点图变成二维数组

python - Matplotlib:更改绘图上两个 x 轴刻度线之间的距离

python - 升级 Google Application Engine 程序以使用 unicode

python - pypy 任务中没有名为 sympy 的模块

python - 这是检查参数值是否属于定义的值范围的一部分的正确方法吗?

python - 为什么 pip 不适合我?

python - Matplotlib - 在我要显示的行中使用 $ 符号时如何添加多行文本框?

python - 去除标签内容之外的文本

python - 使用 Out of Core 进行 Scikit Learn 多标签分类

python - 在 python 中使用 webkit 加载本地文件时出现问题