Python数据分析(Matplotlib)之3D图形

能够使用Matplotlib构建的3D图形示例:

 导入相关包:

from mpl_toolkits.mplot3d.axes3d import Axes3D

 生成数据,并进行相关绘图

绘制3维的散点图,代码如下:

#绘制3维的散点图
x = np.random.randint(0,10,size=100)
y = np.random.randint(-20,20,size=100)
z = np.random.randint(0,30,size=100)

# 此处fig是二维
fig = plt.figure()

# 将二维转化为三维
axes3d = Axes3D(fig)

# axes3d.scatter3D(x,y,z)
# 效果相同
axes3d.scatter(x,y,z)

得到的效果如下图:

绘制三维的线形图,代码如下:

# 绘制三维的线性图
x = np.linspace(0,20,1000)

y = np.sin(x)
z = np.cos(x)

fig = plt.figure(figsize=(8,6))

axes3d = Axes3D(fig)

axes3d.plot(x,y,z)

plt.xlabel('X',size = 30)
plt.ylabel('Y',size = 30)
axes3d.set_zlabel('Z',color = 'r',size=30)

axes3d.set_yticks([-1,0,1])
axes3d.set_yticklabels(['min',0,'max'])

得到的线性图如下:

绘制三维柱状图,代码如下:

# 绘制三维柱状图
fig = plt.figure(figsize=(12,9))

axes3d = Axes3D(fig)


zs = [1,5,10,15,20]

for z in zs:
    x = np.arange(0,10)
    y = np.random.randint(0,30,size =10)
    axes3d.bar(x,y,zs = z,zdir = 'x',color=['r','green','yellow','purple'])

其中方法bar()中的相关参数示例如下:(此处根据tab键提示得出)

plt.bar()
# bar(x, height, *, align='center', **kwargs)
# bar(x, height, width, *, align='center', **kwargs)
# bar(x, height, width, bottom, *, align='center', **kwargs)

执行得到3维柱状图:

# 绘制三维曲面
fig = plt.figure()

axes3d = Axes3D(fig)

#!!面
x = np.linspace(-10,10,100)
y = np.linspace(-10,10,100)

X,Y = np.meshgrid(x,y)
Z = np.sqrt(X**2+Y**2)

axes3d.plot_surface(X,Y,Z)

 得到3维曲面的效果图:

其中,我们需要关注的是numpy中的meshgrid函数,numpy官方文档meshgrid函数帮助文档:numpy官方文档meshgrid函数帮助文档

从坐标向量返回坐标矩阵。

在给定一维坐标数组x1,x2,...,xn的情况下,使ND坐标数组用于ND网格上的ND标量/矢量场的矢量化评估。

在版本1.9中更改:允许1-D和0-D情况。

参数:

x1,x2,...,xn:array_like

表示网格坐标的一维数组。

索引:{'xy','ij'},可选

笛卡尔('xy',默认值)或矩阵('ij')输出索引。有关详细信息,请参阅Notes。

版本1.7.0中的新功能。

稀疏:bool,可选

如果为True,则返回稀疏网格以节省内存。默认值为False。

版本1.7.0中的新功能。

copy:bool,可选

如果为False,则返回原始数组的视图以节省内存。默认为True。请注意, 可能会返回非连续数组。此外,广播阵列的多于一个元素可以指代单个存储器位置。如果需要写入数组,请先进行复制。sparse=False, copy=False

版本1.7.0中的新功能。

返回:

X1,X2,...,XN:ndarray

对于具有长度的向量x1x2,...,'xn',如果indexing ='ij'则Ni=len(xi)返回形状数组或者如果indexing ='xy'则返回形状数组,其中xi元素重复以沿x1的第一维填充矩阵,第二个用于x2,依此类推。(N1, N2, N3,...Nn)(N2, N1, N3,...Nn)

若还是不能理解,可以多找找相关示例进行深度学习

绘制混合图形,本质也就是将2种图形的编码进行组合,放在同一三维模型中,相关代码如下:

# 绘制混合图形
# 绘制三维曲面
fig = plt.figure()

axes3d = Axes3D(fig)

#!!面
x = np.linspace(-10,10,100)
y = np.linspace(-10,10,100)

X,Y = np.meshgrid(x,y)
Z = np.sqrt(X**2+Y**2)

axes3d.plot_surface(X,Y,Z)

x = np.linspace(10,30)
y = np.sin(x)
z = np.cos(x)
axes3d.plot(x,y,z,color = 'r')

 得到如下效果图:

在完成基础3D图形的绘制后,再学习等高线,这一点我也不是特别熟悉,只能提供自己练习的代码:

# 绘制等高线
# 绘制面
from mpl_toolkits.mplot3d import axes3d

X,Y,Z = axes3d.get_test_data()

fig = plt.figure(figsize=(8,8))
axes3 = Axes3D(fig)

# 出现图形
axes3.plot_surface(X,Y,Z)

# 绘制等高线
axes3.contour(X,Y,Z,zdir = 'x',offset = -50)

最终显示的等高线如图:

  • 30
    点赞
  • 135
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值