web-dev-qa-db-ja.com

Python:Pythonを使用して3Dグラフをプロットする方法は?

私はこれを行うために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スペースで水平なグラフが作成されます。ユーザーに面するようにグラフを垂直にするにはどうすればよいですか?

私がやりたいのは、ある程度の距離を置いてユーザーに面している複数の垂直グラフを作成することです。

24
Bruce

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)を使用すると、グラフが少し遅れて表示されます)。

12
Daniel G

Mayavi、特に mlab モジュールは、大規模または複雑なデータで機能する強力な3Dプロットを提供し、numpy配列で簡単に使用できるはずです。

7
Gael Varoquaux

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()
7
Ben

ドキュメントによると、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)
3
badp