0

私はいくつかの 3D データを持っています。たとえばd=[x, y, z, f]zは色情報として使用される Z の数値の列です。

fはフラグです

  1. x特定の値を持っている場合は 0 y(醜い ^^)
  2. 1xyが OKの場合

だから良いデータのためd[ d[:,3] == 1 ] に私はプロファイルを生成したい

plt.imshow(resampled.T, extent=extent, vmin=MIN, vmax=MAX, origin='lower')

醜いデータについては、d[ d[:,3] == 0 ]などの特定の色を使用したいだけです

それを実現する方法はありますか?

編集:@eumiroと@Rutger Kassiesのコメントを組み合わせると、次の結果が得られました ここに画像の説明を入力

これは満足だと思います。完全を期すために (または、私が気付いていない最適化があるかもしれません^^)、ここにコードとデータを示します。

import numpy as np
from matplotlib.mlab import griddata
import matplotlib
import matplotlib.pyplot as plt


def plotprofile(x, y, z0, name='dummy', save=1):
    #plt.figure()
    N = 50j
    z = z0[:,0]
    extent = (min(x), max(x), min(y), max(y))
    xs,ys = np.mgrid[extent[0]:extent[1]:N, extent[2]:extent[3]:N]
    resampled = griddata(x, y, z, xs, ys)

    cmap = plt.get_cmap()
    cmap.set_bad(color = 'k', alpha = 1.)
    #plt.imshow(resampled.T, cmap='Greys', extent=extent, origin='lower', interpolation='spline36')
    plt.imshow(resampled.T,  cmap=cmap, extent=extent, origin='lower',  vmin=min(z),  vmax=-min(z),interpolation='spline36')

cbar=plt.colorbar()
s=20
plt.ylabel(r"$y$", size=s)
plt.xlabel(r"$x", size=s)
plt.xlim([x.min(),x.max()])
plt.ylim([y.min(),y.max()])

if save:
    for end in ["pdf", "png", "eps"]:
        print "save %s.%s"%(name,end)
        plt.savefig("%s.%s"%(name,end))
else:
    plt.show()
plt.clf()


if __name__ == '__main__':
    filename = 'data.txt'
    data = np.loadtxt(filename)
    x = data[:,0]
    y = data[:,1]
    z = data[:,3:]
    plotprofile(x, y, z,  'dummy', 0)
4

1 に答える 1

0

f を使用して z をマスクして、z に通常のカラーマップを作成することはできませんか?

dd = d[:, :3]
dd[:,2] = dd[:,2] * d[:,3]

次に、次のような画像に変換します。

M = dd.max(0)
m = dd.min(0)

x = np.arange(m[0], M[0] + 1)
y = np.arange(m[1], M[1] + 1)
[X, Y] = np.meshgrid(x, y)

Z = np.zeros_like(X)

for num in range(0,size(dd, 0)):
    Z[dd[num, 0], dd[num, 1]] = dd[num, 2]

Zこれで、通常の画像のように、または表面に対してプロットできるはずです[X, Y]

于 2013-01-15T13:21:39.770 に答える