2016-04-27 10 views

答えて

1

現在、SurfacePlotのパラメータが機能しないようにする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の間になるようにデータを正規化し、その後にそれらの値をマップ:何が価値がある、私はこのバグが存在しない場合は、次はうまくいくと信じについては

カラーマップ。これによりSurfacePlotのcolorsパラメータに渡すことができるRGBカラーの3D配列が返されます。

+0

私はこの方法を試しましたが、「インデックスされていれば色は2Dでなければならない」というエラーが表示されます。このスクリプトをコードに追加する必要がありますか?これは私のコードです: 'fig = vp.Fig(show = False) cnorm = z/abs(amax(z)) colors = color.get_colormap(" cool ")。map(cnorm).reshape(z.shapeシェーディング= 'スムース'(0、ユーザ_アクション=なし)、シェーディング= 'スムース' 、色=色) ' –

+0

右。あなたは私が言及したバグにぶつかった。ドキュメントでは、カラー配列は2Dでなければならないと述べていますが、コードでは3Dにする必要があります。しかし、配列を2Dにフラット化すると、まだ初期化されていない基本構造にアクセスしようとするバグが発生します。だから、私が言ったように。おそらくそれが修正されるのを待つか、自分で修正する必要があります。あなたはvispy.sceneのVolumeオブジェクトを試してみてください。これはcmap引数 – orodbhen

+0

が好きです。どうもありがとうございます。私はそれを試してみる:) –

2

頂点ごとに色を設定する必要があります。つまり、頂点の色です。これを達成できる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() 

明示的なsetter set_vertex_colorsの使用がうまくいきました。残念ながら、をsurface(z, vertex_colors=c)に渡すとエラーなしで実行されましたが、頂点の色ごとに変更はありませんでした。結論:明示的にset_vertex_colorsを使用してください。

関連する問題