1

ここに私の問題があります:それぞれが値を持つファイルを含むサブフォルダーの階層があります。例えば ​​:

  • folder1 /
    • folderA / result.xml
    • folderB / result.xml
    • folderC / result.xml
  • folder2 /
    • folderA / result.xml
    • folderB / result.xml
    • folderC / result.xml
  • folder3 /
    • folderA / result.xml
    • folderB / result.xml
    • folderC / result.xml

matplotlibを使用して、folder1からfolder3をX値、folderAからfolderCをY値、対応する結果(各result.xmlファイルから)をZ値としてサーフェスを描画したいと思います。しかし、matplotlibがサーフェスを適切にプロットできるようにZ配列を生成する方法がわかりません。

わかりやすくするために、2つの配列があるとしましょう。

x = ["folder1", "folder2", "folder3"]
y = ["folderA", "folderB", "folderC"]
X,Y = numpy.meshgrid (x,y)

Z配列を生成して、次のように使用できるようにするにはどうすればよいですか。

fig = plt.figure()
ax = fig.gca(projection='3d')
surf = ax.plot_surface(X,Y,Z)

私の質問は、配列の実際の作成(次元と塗りつぶし)のみに関係し、XMLファイルへのアクセスやサブフォルダーの通過には関係しません。

ありがとうございました !

4

1 に答える 1

2

まず、x、y座標を整数に変換します。

import numpy as np
xi = np.arange(len(x))
yi = np.arange(len(y))
Xi, Yi = np.meshgrid(xi, yi)

Z配列の場合、xとyの各ペア(つまり)の値が必要になります('folder1', 'folderA'), ('folder1', 'folderB')...。forループでそれを行うことができます:

Z = np.zeros(Xi.shape)
for i in xi:
    for j in xj:
        xy_pair = (xi[i], yi[j])
        Z[j,i] = calcZ(xy_pair)

関数の背後にあるロジックはcalcZ、XMLファイルからデータを解析する方法に依存していると思います。

わかりやすくするために、プロットでは、アクセスしたフォルダ/ファイルを表すように目盛りラベルを変更できます。

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure()
ax = fig.add_subplot(1, 1, 1, projection='3d')

# ... plot some stuff ...

ax.set_xticks(xi)
ax.set_yticks(yi)
ax.set_xticklabels(x)
ax.set_yticklabels(y)

plt.show()
于 2012-10-25T15:00:30.483 に答える