Python三维绘图
在遇到三维数据时,三维图像能给我们对数据带来更加深入地理解。python的matplotlib库就包含了丰富的三维绘图工具。
1.创建三维坐标轴对象Axes3D
创建Axes3D
主要有两种方式,一种是利用关键字projection='3d'
l来实现,另一种则是通过从mpl_toolkits.mplot3d
导入对象Axes3D
来实现,目的都是生成具有三维格式的对象Axes3D
.
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax1 = plt.axes(projection='3d')
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig=plt.figure()
ax2 = Axes3D(fig)
2.三维曲线和散点
随后在定义的坐标轴上画图:
import numpy as np
z = np.linspace(0,13,1000)
x = 5*np.sin(z)
y = 5*np.cos(z)
zd = 13*np.random.random(100)
xd = 5*np.sin(zd)
yd = 5*np.cos(zd)
ax1.scatter3D(xd,yd,zd, cmap='Blues')
ax1.plot3D(x,y,z,'gray')
plt.show()
3.三维曲面
下一步画三维曲面:
fig = plt.figure()
ax3 = plt.axes(projection='3d')
xx = np.arange(-5,5,0.5)
yy = np.arange(-5,5,0.5)
X, Y = np.meshgrid(xx, yy)
Z = np.sin(X)+np.cos(Y)
ax3.plot_surface(X,Y,Z,cmap='rainbow')
plt.show()
如果加入渲染时的步长,会得到更加清晰细腻的图像:
ax3.plot_surface(X,Y,Z,rstride = 1, cstride = 1,cmap='rainbow')
,其中的row和cloum_stride为横竖方向的绘图采样步长,越小绘图越精细。
4.等高线
同时还可以将等高线投影到不同的面上:
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig4 = plt.figure()
ax4 = plt.axes(projection='3d')
xx = np.arange(-5,5,0.1)
yy = np.arange(-5,5,0.1)
X, Y = np.meshgrid(xx, yy)
Z = np.sin(np.sqrt(X**2+Y**2))
ax4.plot_surface(X,Y,Z,alpha=0.3,cmap='winter')
ax4.contour(X,Y,Z,zdir='z', offset=-3,cmap="rainbow")
ax4.contour(X,Y,Z,zdir='x', offset=-6,cmap="rainbow")
ax4.contour(X,Y,Z,zdir='y', offset=6,cmap="rainbow")
ax4.set_xlabel('X')
ax4.set_xlim(-6, 4)
ax4.set_ylabel('Y')
ax4.set_ylim(-4, 6)
ax4.set_zlabel('Z')
ax4.set_zlim(-3, 3)
plt.show()
5.随机散点图
可以利用scatter()
生成各种不同大小,颜色的散点图,其参数如下:
matplotlib.pyplot.scatter(x, y,
s=None,
c=None,
marker=None,
cmap=None,
norm=None,
vmin=None, vmax=None,
alpha=None,
linewidths=None,
verts=None,
edgecolors=None,
data=None,
**kwargs
)
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig4 = plt.figure()
ax4 = plt.axes(projection='3d')
xx = np.random.random(20)*10-5
yy = np.random.random(20)*10-5
X, Y = np.meshgrid(xx, yy)
Z = np.sin(np.sqrt(X**2+Y**2))
ax4.scatter(X,Y,Z,alpha=0.3,c=np.random.random(400),s=np.random.randint(10,20, size=(20, 40)))
plt.show()
Finish
Todo bar
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)