欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

T-SNE+Python散点图绘制+图例

程序员文章站 2024-01-19 09:17:34
...

T-SNE+Python散点图绘制+图例

背景

T-SNE可以用于数据降维,降维之后的数据我们用散点图进行可视化处理。

在这里我搜集了不少资料,发现散点图添加图例的最好方法还是把不同类的点分开来存储,在绘制的时候也分开来绘制。

具体代码见下,已有十分详细的注释。

代码

import matplotlib.pyplot as plt
from sklearn import manifold, datasets
import scipy.io as scio

# x中保存的是数值矩阵, 每个点的特征为一行

dataFile = 'F:\Image-steganography\\tsne\Data_test.mat'
x = scio.loadmat(dataFile)
x = x['Data_test']

# color是为了可视化做的颜色
dataFile = 'F:\Image-steganography\\tsne\label_test.mat'
color = scio.loadmat(dataFile)
color = color['label']

colors = []

for c in color:
    if c == 1:
        colors.append('hotpink')
    else:
        colors.append('deepskyblue')

# 创建自定义图像
fig = plt.figure(figsize=(12, 12))  # 指定图像的宽和高
# t-SNE的降维与可视化

plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签

plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号

ts = manifold.TSNE(n_components=2, init='pca', random_state=0)
# 训练模型
y = ts.fit_transform(x)

X1 = []
X2 = []
Y1 = []
Y2 = []
for i in range(3844):
    if color[i] == 1:
        X1.append(y[i, 0])
        Y1.append(y[i, 1])
    else:
        X2.append(y[i, 0])
        Y2.append(y[i, 1])

a = plt.scatter(X1, Y1, color="hotpink")
b = plt.scatter(X2, Y2, color="deepskyblue")

plt.legend((a, b), ('嵌入点', '非嵌入点'), fontsize=14)

plt.xticks(fontsize=16)
plt.yticks(fontsize=16)
# 显示图像
plt.show()