15

クラスを使用して、MayaVi Python ライブラリを使用して 3D ポイントをプロットしていpoints3dます。ドキュメントでは、各ポイントの色が 4 番目の引数で指定されることが指定されていますs

さらに、x、y、および z と同じ形状の 4 番目の配列 s を渡して、各点に関連付けられたスカラー値を与えるか、スカラー値を返す関数 f(x, y, z) を渡すことができます。このスカラー値を使用して、ポイントの色とサイズを調整できます。

これは、各ポイントのスカラー値を指定し、ポイントをcopperjetまたはなどのカラーマップにマップしますhsv。たとえば、ドキュメントから:

import numpy
from mayavi.mlab import *

def test_points3d():
    t = numpy.linspace(0, 4*numpy.pi, 20)
    cos = numpy.cos
    sin = numpy.sin

    x = sin(2*t)
    y = cos(t)
    z = cos(2*t)
    s = 2+sin(t)

    return points3d(x, y, z, s, colormap="copper", scale_factor=.25)

与えます:

ここに画像の説明を入力

代わりに、各ポイントの実際の値を (r, g, b) タプルとして指定したいと思います。これは MayaVi で可能ですか? をタプルの配列に置き換えようとしましたsが、エラーがスローされます。

4

4 に答える 4

17

今日のほとんどでこれに苦労した後、質問が求めていることを正確に行う比較的簡単な方法を見つけました-各ポイントにRGBタプルを指定します。コツは、プロットするポイントとまったく同じ数のエントリを持つカラー マップを定義し、引数をインデックスのリストに設定することです。

# Imports
import numpy as np
from mayavi.mlab import quiver3d, draw

# Primitives
N = 200 # Number of points
ones = np.ones(N)
scalars = np.arange(N) # Key point: set an integer for each point

# Define color table (including alpha), which must be uint8 and [0,255]
colors = (np.random.random((N, 4))*255).astype(np.uint8)
colors[:,-1] = 255 # No transparency

# Define coordinates and points
x, y, z = colors[:,0], colors[:,1], colors[:,2] # Assign x, y, z values to match color
pts = quiver3d(x, y, z, ones, ones, ones, scalars=scalars, mode='sphere') # Create points
pts.glyph.color_mode = 'color_by_scalar' # Color by scalar

# Set look-up table and redraw
pts.module_manager.scalar_lut_manager.lut.table = colors
draw()
于 2015-05-15T18:16:36.473 に答える
3

colorこれは、引数を使用して簡単に実行できるようになりました

from mayavi import mlab
import numpy as np

c = np.random.rand(200, 3)
r = np.random.rand(200) / 10.

mlab.points3d(c[:, 0], c[:, 1], c[:, 2], r, color=(0.2, 0.4, 0.5))

mlab.show()

ここに画像の説明を入力

于 2017-07-26T11:56:15.817 に答える