我VisPy
用来绘制曲面,但该函数scene.visuals.SurfacePlot
只有参数color
,没有参数colormap
。有谁知道如何colormap
在曲面绘图中使用?
问问题
1680 次
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 工作正常。不幸的是(可能是一个错误)当传递c
到surface(z, vertex_colors=c)
运行时没有错误但没有改变每个顶点的颜色。结论:使用显式set_vertex_colors
.
于 2016-10-02T17:16:22.523 回答
1
目前,似乎有一个错误使colors
SurfacePlot 的参数无法正常工作。给表面除了纯色之外的任何东西可能都必须沿着这条路走。因此,如果不更改源代码,目前可能无法实现。
对于它的价值,我相信如果不存在此错误,以下内容将起作用:
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 回答