2024-06-09 20:20:52 发布
网友
我使用VisPy来绘制一个曲面,但是函数scene.visuals.SurfacePlot只有参数color,没有参数{}。有人知道如何在曲面绘图中使用colormap吗?在
VisPy
scene.visuals.SurfacePlot
color
colormap
目前,似乎有一个bug使SurfacePlot的colors参数无法工作。给表面一个除了纯色之外的任何东西都可能会沿着这条路走下去。所以在这个时候不修改源代码是不可能的。在
colors
不管怎样,我相信如果这个bug不存在,下面的方法是可行的:
import vispy.plot as vp from vispy import color fig = vp.Fig(show=False) cnorm = z / abs(np.amax(z)) colors = color.get_colormap("hsl").map(cnorm).reshape(z.shape + (-1,)) fig[0, 0].surface(z, x=x, y=y, colors=colors)
基本上,将数据规格化为0到1之间,然后将这些值映射到colormap。这将返回一个RGB颜色的3D数组,您可以将其传递给SurfacePlot的colors参数。在
必须按顶点设置颜色,即顶点颜色。实现这一目标的一种方法是:
import vispy.plot as vp from vispy import color from vispy.util.filter import gaussian_filter import numpy as np z = np.random.normal(size=(250, 250), scale=200) z[100, 100] += 50000 z = gaussian_filter(z, (10, 10)) fig = vp.Fig(show=False) cnorm = z / abs(np.amax(z)) c = color.get_colormap("hsl").map(cnorm).reshape(z.shape + (-1,)) c = c.flatten().tolist() c=list(map(lambda x,y,z,w:(x,y,z,w), c[0::4],c[1::4],c[2::4],c[3::4])) #p1 = fig[0, 0].surface(z, vertex_colors=c) # why doesn't vertex_colors=c work? p1 = fig[0, 0].surface(z) p1.mesh_data.set_vertex_colors(c) # but explicitly setting vertex colors does work? fig.show()
注意使用显式setter set_vertex_colors效果很好。不幸的是(可能是一个bug)将c传递给surface(z, vertex_colors=c)时没有出错,但没有更改逐顶点颜色。结论:使用显式set_vertex_colors。在
c
surface(z, vertex_colors=c)
set_vertex_colors
目前,似乎有一个bug使SurfacePlot的
colors
参数无法工作。给表面一个除了纯色之外的任何东西都可能会沿着这条路走下去。所以在这个时候不修改源代码是不可能的。在不管怎样,我相信如果这个bug不存在,下面的方法是可行的:
基本上,将数据规格化为0到1之间,然后将这些值映射到colormap。这将返回一个RGB颜色的3D数组,您可以将其传递给SurfacePlot的
colors
参数。在必须按顶点设置颜色,即顶点颜色。实现这一目标的一种方法是:
注意使用显式setter set_vertex_colors效果很好。不幸的是(可能是一个bug)将
c
传递给surface(z, vertex_colors=c)
时没有出错,但没有更改逐顶点颜色。结论:使用显式set_vertex_colors
。在相关问题 更多 >
编程相关推荐