import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
%matplotlib inline
#導入畫3D圖的包
fig=plt.figure()
ax=Axes3D(fig)
#定義數據
x=np.arange(-4,4,0.25)
y=np.arange(-4,4,0.25)
#生成XYZ的數據
X,Y=np.meshgrid(x,y)
Z=np.sin(np.sqrt(X**2+Y**2))#Z 必須是二維
#畫3D圖
ax.plot_surface(X,Y,Z,rstride=1,cstride=1,cmap='rainbow')
#畫在XY面投影
ax.contour(X,Y,Z,zdim='z',offset=-2,cmap='rainbow')
ax.set_zlim(-2,2)#限制投影的範圍
fig=plt.figure()
ax=fig.add_subplot(111,projection='3d')
注意每次畫圖時都要定義一下,否則沒法做圖fig=plt.figure(),ax=fig.gca(projection='3d')javascript
#導入3D包
fig=plt.figure()
ax=fig.gca(projection='3d')
#定義數據
theta=np.linspace(-4*np.pi,4*np.pi,100)
z=np.linspace(-2,2,100)
r=z**2+1
x=r*np.sin(theta)
y=r*np.cos(theta)
ax.plot(x,y,z)
4-1 繪製通常的散點圖css
#數據導入
np.random.seed()
def randrange(n,vmin,vmax):
return (vmax-vmin)*np.random.rand(n)+vmin
#導入3D包
fig=plt.figure()
ax=fig.add_subplot(111,projection='3d')
n=100
#c,m,zlow,zhigh分別表示顏色,標記的符號,最小值,最大值
for c,m,zlow,zhigh in [('r','o',-50,-25),('b','x',-30,-5)]:
xs=randrange(n,23,32)
ys=randrange(n,0,100)
zs=randrange(n,zlow,zhigh)
ax.scatter(xs,ys,zs,c=c,marker=m)
4-2 改變視圖角度 ax.view_init(x,y)html
np.random.seed()
def randrange(n,vmin,vmax):
return (vmax-vmin)*np.random.rand(n)+vmin
#導入3D包
fig=plt.figure()
ax=fig.add_subplot(111,projection='3d')
n=100
#c,m,zlow,zhigh分別表示顏色,標記的符號,最小值,最大值
for c,m,zlow,zhigh in [('r','o',-50,-25),('b','x',-30,-5)]:
xs=randrange(n,23,32)
ys=randrange(n,0,100)
zs=randrange(n,zlow,zhigh)
ax.scatter(xs,ys,zs,c=c,marker=m)
ax.view_init(40,10)#改變視角
3D柱狀圖html5
zdir='x':可改變z軸方向爲x軸java
#導入3D包
fig=plt.figure()
ax=fig.add_subplot(111,projection='3d')
#畫柱狀圖
for c,z in zip(['r','g','b','y'],[30,20,10,0]):
xs=np.arange(20)
ys=np.random.rand(20)
cs=[c]*len(xs)
ax.bar(xs,ys,zs=z,zdir='y',color=cs,alpha=0.5)#改變z軸方向