在k3d绘制点云时增加attribute以实现不同cluster的上色
之前的文章中包含了多团点云,但是作图时只有一个颜色,那么如何让不同的cluster呈现不同的颜色呢?
核心作图代码和效果直接奉上。控制颜色时,我们增加了一个参数是 attribute,也就是这个数据点的属性,这里参数传入的是 DBSCAN 聚类所得到的标签,然后就按照默认的colormap为不同的属性值映射不同的颜色。关于 k3d.points 更详细的参数和用法,在 jupyter lab 中可以通过 ?k3d.points 来查看:
另外需要注意的是,DBSCAN的时候要调整相关参数,以避免cluster太小。我这里使用的代码如下:
from aicsimageio import AICSImagefrom glob import globimport numpy as npfrom sklearn.cluster import DBSCANimport k3d
fps = glob("*.czi")a = AICSImage(fps[1])data = a.get_image_data("ZYX", C=0)zs, ys, xs = np.where(data>0)locs = np.vstack([xs, ys, zs]).T
# 第一次聚类用于去噪clustering = DBSCAN(eps=3, min_samples=3).fit(locs)inds = np.where(clustering.labels_>-1)locs2 = locs[inds]# 第二次聚类用于分开不同的大clusterclustering2 = DBSCAN(eps=10, min_samples=3).fit(locs2)
pts = k3d.points(locs2, point_size=1, attribute=clustering2.labels_, name='pixel')plot = k3d.plot(name='PSF')plot += ptsplot.display()类似的 DBSCAN 也有还其它参数可以调节,可以通过 ?DBSCAN 在 jupyterlab 中查看: