私はこれを行うためにmatplotlibを使用しています
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
fig = plt.figure()
ax = Axes3D(fig)
x = [6,3,6,9,12,24]
y = [3,5,78,12,23,56]
ax.plot(x, y, zs=0, zdir='z', label='zs=0, zdir=z')
plt.show()
これで、3Dスペースで水平なグラフが作成されます。ユーザーに面するようにグラフを垂直にするにはどうすればよいですか?
私がやりたいのは、ある程度の距離を置いてユーザーに面している複数の垂直グラフを作成することです。
bpの答えはうまくいくかもしれませんが、もっと簡単な方法があります。
現在のグラフはz軸で「フラット」です。そのため、グラフは水平です。垂直にする必要があります。つまり、Y軸上で「フラット」にする必要があります。これには、コードへの最も小さな変更が含まれます。
_from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
fig = plt.figure()
ax = Axes3D(fig)
x = [6,3,6,9,12,24]
y = [3,5,78,12,23,56]
# put 0s on the y-axis, and put the y axis on the z-axis
ax.plot(xs=x, ys=[0]*len(x), zs=y, zdir='z', label='ys=0, zdir=z')
plt.show()
_
次に、ysパラメーターに異なる値を使用することで、このようなグラフを複数作成できます(たとえば、ys=[2]*len(x)
を使用すると、グラフが少し遅れて表示されます)。
Mayavi、特に mlab モジュールは、大規模または複雑なデータで機能する強力な3Dプロットを提供し、numpy配列で簡単に使用できるはずです。
3Dプロットのビュー角度は、view_init()関数で設定できます。以下の例は、matplotlibのバージョン1.1のものです。
from mpl_toolkits.mplot3d import axes3d
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = [6,3,6,9,12,24]
y = [3,5,78,12,23,56]
ax.plot(x, y, zs=0, zdir='z', label='zs=0, zdir=z')
ax.view_init(90, -90)
plt.show()
ドキュメントによると、ax.plot_surface(x,y,z)
メソッドを使用します。詳細とグラフの種類 こちら 。
以下はうまくいくはずです:
x = [1,2,3]
y = [4,5,6]
z = [7,8,9]
data = Zip(x,y,z)
#map data on the plane
X, Y = numpy.meshgrid(arange(0, max(x), 1), arange(0, max(y), 1))
Z = numpy.zeros((len(Y), len(X)), 'Float32')
for x_,y_,z_ in data:
Z[x_, y_] = z_ #this should work, but only because x and y are integers
#and arange was done with a step of 1, starting from 0
fig = p.figure()
ax = p3.Axes3D(fig)
ax.plot_surface(X, Y, Z)