1

これをどう言うかよくわからないので、説明を明確にしようと思います。現在、1番目の列が深さを表し、2番目の列がx軸上の位置を表す3Dnumpy配列があります。私の目標は、1Dフロート配列の値に基づいて列がx軸に沿って広がるpcolorを作成することです。

ここで注意が必要です。ポイント間の相対距離しかありません。つまり、列1と列2の間の距離などです。

これが私が持っているものと私が欲しいものの例です:

darray = [[2  3  7  7]
          [4  8  2  3]
          [6  1  9  5]
          [3  4  8  4]]

posarray = [ 3.767, 1.85, 0.762]

DesiredArray = [[2  0  0  0  3  0  7  7]
                [4  0  0  0  8  0  2  3]
                [6  0  0  0  1  0  9  5]
                [3  0  0  0  4  0  8  4]]

実装を試みた方法:

def space_set(darr, sarr):
    spaced = np.zeros((260,1+int(sum(sarr))), dtype = float)
    x = 0
    for point in range(len(sarr)):
            spaced[:, x] = darr[:,point]
            x = int(sum(sarr[0:point]))
    spaced[:,-1] = darr[:,-1]

それから私はそれをプロットするためにmatplotlibspcolorを使用することを計画していました。ただし、この方法では列が失われるようです。直接プロットするか、プロットするためにnumpy配列を作成するためのアイデアはありますか?前もって感謝します。

これが私が探しているものの例です。サンプル画像

4

1 に答える 1

4

空白が非常に多いため、pcolorを使用するよりも、長方形を描画する方が簡単な場合があります。ボーナスとして、整数値のグリッドに長方形を「スナップ」するのではなく、長方形を希望の場所に正確に配置できます。また、主にゼロで埋められたより大きな2D配列にスペースを割り当てる必要はありません。(あなたの場合、必要なメモリはおそらくわずかですが、アイデアはうまく拡張できないので、それを避けることができれば素晴らしいです。)

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.patches as patches
import matplotlib.cm as cm

def draw_rect(x, y, z):
    rect = patches.Rectangle((x,y), 1, 1, color = jet(z))
    ax.add_patch(rect)

jet = plt.get_cmap('jet')
fig = plt.figure()
ax = fig.add_subplot(111)

darray = np.array([[2, 3, 7, 7],
                   [4, 8, 2, 3],
                   [6, 1, 9, 5],
                   [3, 4, 8, 4]], dtype = 'float')
darray_norm = darray/darray.max()

posarray = [3.767, 1.85, 0.762]
x = np.cumsum(np.hstack((0, np.array(posarray)+1)))

for j, i in np.ndindex(darray.shape):
    draw_rect(x[j], i, darray_norm[i, j])
ax.set_xlim(x.min(),x.max()+1)
ax.set_ylim(0,len(darray))
ax.invert_yaxis()    
m = cm.ScalarMappable(cmap = jet)
m.set_array(darray)
plt.colorbar(m)
plt.show()

収量

ここに画像の説明を入力してください

于 2012-10-30T20:15:40.463 に答える