如何在VisPy surfacep中使用colormap

2024-06-09 20:20:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用VisPy来绘制一个曲面,但是函数scene.visuals.SurfacePlot只有参数color,没有参数{}。有人知道如何在曲面绘图中使用colormap吗?在


Tags: 函数绘图参数绘制scenecolor曲面vispy
2条回答

目前,似乎有一个bug使SurfacePlot的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。在

相关问题 更多 >