0

私はVisPy表面をプロットするために使用していますが、関数scene.visuals.SurfacePlotにはパラメータのみがあり、パラメータcolorはありませんcolormapcolormap表面プロットでの使用方法を知っている人はいますか?

4

2 に答える 2

4

vertex_colors など、頂点ごとに色を設定する必要があります。これを実現する 1 つの方法は次のとおりです。

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)エラーなしで実行されましたが、頂点ごとの色は変更されませんでした。結論: explicit を使用しますset_vertex_colors

于 2016-10-02T17:16:22.523 に答える
1

現在、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 の間になるように正規化し、それらの値をカラーマップにマップします。colorsこれは、SurfacePlot のパラメーターに渡すことができる RGB カラーの 3D 配列を返します。

于 2016-05-15T01:56:51.567 に答える