DAminoMuta / vis /plot_umap_3d.py
auralray's picture
Upload folder using huggingface_hub
acbef3a verified
# -*- 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")