File size: 1,624 Bytes
acbef3a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# -*- coding: utf-8 -*-
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.colors import LinearSegmentedColormap
from mpl_toolkits.mplot3d import Axes3D  # 注册 3D 投影

# —— 1. 读取坐标和元数据 —— #
df = pd.read_csv('umap_3d_points.csv')

# —— 2. 划分三类 —— #
idx1     = df.index[df['label'] == 1].tolist()
idx0     = df.index[df['label'] == 0].tolist()
idx_rest = df.index[df['label'].isna()].tolist()

# —— 3. 渐变色 —— #
cmap = LinearSegmentedColormap.from_list('bg_cmap', ['#87CEEB', '#FFDAB9'])
bg_scores = df.loc[idx_rest, 'score'].fillna(0.5).values
bg_colors = cmap(bg_scores)

# —— 4. 绘图 —— #
fig = plt.figure(figsize=(8,8))
ax = fig.add_subplot(111, projection='3d')

# 背景点
ax.scatter(
    df.loc[idx_rest,'x'],
    df.loc[idx_rest,'y'],
    df.loc[idx_rest,'z'],
    c=bg_colors,
    s=20,
    alpha=0.06,
    label='Background'
)

# 标签 0
ax.scatter(
    df.loc[idx0,'x'],
    df.loc[idx0,'y'],
    df.loc[idx0,'z'],
    c='#006EFF',
    s=60,
    alpha=1.0,
    label='Not Improved'
)

# 标签 1
ax.scatter(
    df.loc[idx1,'x'],
    df.loc[idx1,'y'],
    df.loc[idx1,'z'],
    c='orange',
    s=60,
    alpha=1.0,
    label='Improved'
)

ax.set_title('3D UMAP Visualization', fontsize=18)
# ax.set_axis_off()
ax.set_xticklabels([])
ax.set_yticklabels([])
ax.set_zticklabels([])
ax.legend(loc='upper left', frameon=False, fontsize=12)
plt.tight_layout()
plt.show()  # 或者显示
# plt.savefig('umap_3d.svg')
# print("已保存 umap_3d.svg")