如何在 VisPy surfaceplot 中使用颜色图
How to use colormap in VisPy surfaceplot
我正在使用 VisPy
绘制曲面,但是函数 scene.visuals.SurfacePlot
只有参数 color
,没有参数 colormap
。有谁知道如何在曲面绘图中使用 colormap
?
目前,似乎有一个 bug 使 SurfacePlot 的 colors
参数无法工作。除了纯色之外,给表面任何东西都可能不得不沿着这条路走下去。因此,目前可能无法不更改源代码。
就其价值而言,我相信如果不存在此错误,以下内容会起作用:
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 之间,然后将这些值映射到颜色图。这将 return 一个 RGB 颜色的 3D 数组,您可以将其传递给 SurfacePlot 的 colors
参数。
必须在每个顶点的基础上设置颜色,即 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()
注意显式 setter set_vertex_colors 的使用效果很好。不幸的是(可能是一个错误)在将 c
传递给 surface(z, vertex_colors=c)
运行 时没有错误但没有更改每个顶点的颜色。结论:使用显式 set_vertex_colors
.
我正在使用 VisPy
绘制曲面,但是函数 scene.visuals.SurfacePlot
只有参数 color
,没有参数 colormap
。有谁知道如何在曲面绘图中使用 colormap
?
目前,似乎有一个 bug 使 SurfacePlot 的 colors
参数无法工作。除了纯色之外,给表面任何东西都可能不得不沿着这条路走下去。因此,目前可能无法不更改源代码。
就其价值而言,我相信如果不存在此错误,以下内容会起作用:
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 之间,然后将这些值映射到颜色图。这将 return 一个 RGB 颜色的 3D 数组,您可以将其传递给 SurfacePlot 的 colors
参数。
必须在每个顶点的基础上设置颜色,即 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()
注意显式 setter set_vertex_colors 的使用效果很好。不幸的是(可能是一个错误)在将 c
传递给 surface(z, vertex_colors=c)
运行 时没有错误但没有更改每个顶点的颜色。结论:使用显式 set_vertex_colors
.