Matplotlib指定cmap仍显示viridis色条及3D绘图单图颜色统一问题
3D特征可视化问题解答
问题说明
尝试可视化TSNE生成的特征,核心需求是:在3D散点图中,让单张图像的所有特征坐标点使用同一颜色,提供的第二段代码绘制出的100个点看似颜色深浅不一,需排查原因并给出正确实现。
代码问题分析
第二段代码的问题
import numpy as np import matplotlib.pyplot as plt fig = plt.figure() ax = fig.add_subplot(projection='3d') features = np.random.rand(1, 100, 2) i = 0 for fvec in features: x_coord, y_coord = fvec.T p = ax.scatter(i, x_coord, y_coord, c=i*np.ones(len(x_coord)), norm=plt.Normalize(0,1), cmap='plasma') i = i+1 fig.colorbar(p) plt.show()
- 视觉误差导致误解:这段代码中
i始终为0,c参数传入的是全0数组,理论上所有点的颜色完全一致。你看到的"深浅不一"是3D绘图的光照效果造成的视觉错觉,而非颜色本身有差异。 - 写法冗余:用
c+cmap的方式实现单一颜色属于绕路操作,c参数的设计初衷是将数值数组映射到颜色空间以实现多色渐变,单一颜色直接用color参数更直观。
正确实现方案
方案1:单张图像特征可视化(推荐)
通过color参数直接从色卡中选取对应颜色,同时正确生成关联色条:
import numpy as np import matplotlib.pyplot as plt fig = plt.figure() ax = fig.add_subplot(projection='3d') # 模拟单张图像的100个特征点 features = np.random.rand(100, 2) image_idx = 0 # 当前图像的索引 # 从plasma色卡中获取对应索引的颜色 norm = plt.Normalize(0, 1) # 假设图像索引范围为0-1 point_color = plt.cm.plasma(norm(image_idx)) # 绘制所有特征点,x轴固定为图像索引,y/z轴用特征值 ax.scatter(image_idx, features[:, 0], features[:, 1], color=point_color) # 手动创建颜色映射对象,用于生成色条 sm = plt.cm.ScalarMappable(norm=norm, cmap='plasma') sm.set_array([]) # 无需传入数据,仅用于关联色卡 fig.colorbar(sm, label="图像索引") plt.show()
方案2:多张图像批量可视化(扩展需求)
如果需要同时绘制多张图像的特征,每张图像的点用同一颜色,可参考以下代码:
import numpy as np import matplotlib.pyplot as plt fig = plt.figure() ax = fig.add_subplot(projection='3d') # 模拟10张图像,每张100个特征点 features = np.random.rand(10, 100, 2) image_count = features.shape[0] norm = plt.Normalize(0, image_count-1) cmap = plt.cm.get_cmap('plasma', image_count) for idx, fvec in enumerate(features): # 每张图像的点使用同一颜色 ax.scatter(idx, fvec[:,0], fvec[:,1], color=cmap(norm(idx))) # 添加关联图像索引的色条 sm = plt.cm.ScalarMappable(norm=norm, cmap=cmap) sm.set_array([]) fig.colorbar(sm, label="图像索引") plt.show()
补充说明
- 第一段代码的逻辑是每50张图像绘制一次,且每张图像的点使用对应索引的颜色,本身符合"单张图像点同色"的需求,若要绘制所有图像,只需去掉
if(i%50 == 0)的判断即可。 - 若需要色条关联图像索引,必须手动创建
ScalarMappable对象,因为使用color参数时,散点对象不会自动关联颜色映射。
内容的提问来源于stack exchange,提问作者Divya Gupta
相关产品推荐
相关产品推荐

