2017-05-17 9 views
1

Matplotlibを使用すると、次の代数方程式を3Dでプロットするにはどうすればよいですか? 3面の交差を視覚化しますか?Matplotlibを使用して代数方程式をプロットする方法

+1

* matplotlib * not * mat ** h ** plotlib * - 数学関数をプロットしないことを意味します。それらをプロットするには、(x、y、z)ペアの離散値を計算する必要があります。あるいは、あなたが達成したいものに近いかもしれない[sympyの作図モジュール](http://docs.sympy.org/dev/modules/plotting.html)を見てください。 – kazemakase

+1

私はいつもmatplotlibがmat ** h ** ematical plotting libraryの略であると考えました。 – ImportanceOfBeingErnest

+0

@ImportanceOfBeingErnest明確にするために、OPはもともとhでmatplotlibを綴っていました。むしろMatlabにちなんで名づけられたと思っていました。これはMatlabの略です。 – kazemakase

答えて

2

式は、閉じた形でmatplotlibでプロットする必要があります。これは、その方程式の方が比較的簡単です。
2次元のメッシュグリッドを使用して、方程式に従って欠落した次元の値を計算することができます。さて、3次元すべての値を持つので、plot_surfaceを使って面をプロットすることができます。

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


z1 = lambda x,y: 5./2.-x/2.+y/2. # x - y + 2z = 5 
z2 = lambda x,y: y+1    #  y - z = -1 
z3 = lambda x,y: 3.*np.ones_like(x) #   z = 3 

x = np.arange(-3,3) 
X,Y = np.meshgrid(x,x) 


fig = plt.figure() 
ax = fig.gca(projection='3d') 
ax.set_xlabel("x"); ax.set_ylabel("y"); ax.set_zlabel("z") 


surf = ax.plot_surface(X, Y, z1(X,Y), color="C1", linewidth=0, shade=False) 
surf = ax.plot_surface(X, Y, z2(X,Y), color="C2", linewidth=0, shade=False) 
surf = ax.plot_surface(X, Y, z3(X,Y), color="C3", linewidth=0, shade=False) 


plt.show() 

enter image description here

面が真の3Dレンダリングされていないmatplotlibのが原因である、交差していないようです。

+0

ありがとう!これはまさに私が探していたものです。本当の3Dレンダラではない理由は何ですか?私は彼らのギャラリーでより複雑な3Dの例を見る。 – Godekere

+1

3Dプロットのアーティストは、単に2D空間に投影されます。これは、1人のアーティストが別のアーティストの前または後ろにあることを意味しますが、部分的に正面にも部分的にも後ろにはありません。これをmatplotlibで解決する唯一の方法は、視野角に応じて平面を2つのセクションに分割することです。 – ImportanceOfBeingErnest

+1

%matplotlibノートブックで、すべてのplot_surface ....でalpha = 0.5を使用しています。 (X、Y、Z1(X、Y)、α= 0.5、rstride = 100、cstride = 100)、私は視野角を変えてJupyter Notebookの平面の交差を見ることができ、すべての平面はポイント – Godekere

関連する問題