2017-05-17 1 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의 이름을 따서 명명 된 것이라고 생각했다. – kazemakase

답변

2

방정식은 닫힌 형식으로 가져 와서 matplotlib로 그려야합니다. 이것은 질문의 방정식에 비교적 쉽습니다.
2 차원에서 meshgrid를 사용하여 방정식에 따라 누락 된 치수의 값을 계산할 수 있습니다. 이제 모든 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 공간에 투영됩니다. 즉 한 예술가가 다른 예술 작품의 앞이나 뒤에 있지만 부분적으로는 앞뒤에 부분적으로 있지 않습니다. matplotlib에서이를 해결하는 유일한 방법은 시야각에 따라 평면을 두 개의 섹션으로 나누는 것입니다. – ImportanceOfBeingErnest

+1

% matplotlib 노트북을 사용하고 모든 plot_surface ....에서 alpha = 0.5를 사용합니다. 예 :. (X, Y, z1 (X, Y), alpha = 0.5, rstride = 100, cstride = 100), Jupyter Notebook에서 평면의 교차를보기 위해 시야각을 변경할 수 있으며 모든 평면은 포인트 – Godekere

관련 문제