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

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

文章目录

  • 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()

你可能感兴趣的:(python)