想要改变世界,就得先改变自己。 ------ 博客首页

4-7 3D绘图

In [1]:
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
%matplotlib inline
 
  • cmap参数可以控制三维曲面的颜色组合, 一般我们见到的三维曲面就是 rainbow 的你也可以修改 rainbow 为 coolwarm,rstride = 1说明在x向的条纹间隔为1个x向的间隔0.25,cstride = 1说明在y向的条纹间隔为1个y向的间隔0.25.他们的默认值都是1
 
  1. 绘制一般的3D图
In [2]:
#导入画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)#限制投影的范围
 
E:\Software\Anaconda3_5.2.0\lib\site-packages\matplotlib\contour.py:960: UserWarning: The following kwargs were not used by contour: 'zdim'
  s)
Out[2]:
(-2, 2)
 
 
  1. 绘制3D坐标系
In [3]:
fig=plt.figure()
ax=fig.add_subplot(111,projection='3d')
 
 
  1. 画3D螺旋线

注意每次画图时都要定义一下,不然无法作图fig=plt.figure(),ax=fig.gca(projection='3d')

In [4]:
#导入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)
Out[4]:
[<mpl_toolkits.mplot3d.art3d.Line3D at 0x8d06c50>]
 
 
  1. 3D散点图

4-1 绘制一般的散点图

In [5]:
#数据导入
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)

In [6]:
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)#改变视角
 
 
  1. 3D柱状图

    zdir='x':可改变z轴方向为x轴

In [7]:
#导入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轴方向
 
posted @ 2019-10-25 19:49  karina512  阅读(431)  评论(0编辑  收藏  举报