2010-02-19 3 views
21

나는이Python : 파이썬을 사용하여 3D 그래프를 그리는 방법은 무엇입니까?

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

을 수행하기위한하기 matplotlib를 사용하고 지금이는 3 차원 공간에서 수평 그래프를 작성합니다. 그래프가 사용자를 향하도록 세로로 만드는 방법은 무엇입니까?

내가하고 싶은 것은 일정 거리로 분리되어 있고 사용자를 마주보고있는 여러 개의 수직 그래프를 만드는 것입니다.

+0

2D 데이터를 플롯하기 위해 3D 그래프를 사용하는 것이 다소 어리석은가요? – badp

+2

나는 알파의 다양한 값에 대해 그래프의 변화를 관찰하고 (x와 y가 아닌) 특정 매개 변수 alpha를 변화시키고있다. – Bruce

답변

11

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) 대신 뒤에 약간 그래프를 둘 것입니다).

3

설명서에 따라 ax.plot_surface(x,y,z) 메서드를 사용하려고합니다. 자세한 정보 및 차트 유형 here.

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

Mayavi, 특히 mlab 모듈은 크거나 복잡한 데이터에서 작동하는 강력한 3D 플로팅을 제공하며 숫자가 적은 배열에서 쉽게 사용할 수 있어야합니다.

7

view_init() 함수를 사용하여 3 차원 플롯의보기 각도를 설정할 수 있습니다. 아래의 예제는 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() 
관련 문제