0

VisPy用来绘制曲面,但该函数scene.visuals.SurfacePlot只有参数color,没有参数colormap。有谁知道如何colormap在曲面绘图中使用?

4

2 回答 2

4

必须在每个顶点的基础上设置颜色,即 vertex_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()

请注意使用显式设置器 set_vertex_colors 工作正常。不幸的是(可能是一个错误)当传递csurface(z, vertex_colors=c)运行时没有错误但没有改变每个顶点的颜色。结论:使用显式set_vertex_colors.

于 2016-10-02T17:16:22.523 回答
1

目前,似乎有一个错误使colorsSurfacePlot 的参数无法正常工作。给表面除了纯色之外的任何东西可能都必须沿着这条路走。因此,如果不更改源代码,目前可能无法实现。

对于它的价值,我相信如果不存在此错误,以下内容将起作用:

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 之间,然后将这些值映射到颜色图。这将返回一个 RGB 颜色的 3D 数组,您可以将其传递给 SurfacePlot 的colors参数。

于 2016-05-15T01:56:51.567 回答