【Python】三维画图——matplotlib以及np.mgrid的使用

1. np.mgrid的简单理解和使用

  • np.mgrid[start: end: step]
    参数解析:

    start:开始坐标

    stop:结束坐标(实数不包括,复数包括)

    step:步长(实数代表间隔,复数代表取多少个点,如3j就是取3个点)

  • 2D下,(x,y),x的取值变为一列,然后向右拓展长度为len(y);y的取值变为一行,向下拓展长度为len(x);

  • 3D也类似,主要是无法形容,具体看代码展示;

  • 注意:mgrid中的k,b,ErrorArry分别对应x,y,z轴!

1维

# 1D矩阵
x = np.mgrid[1:3:1]
print("步长为实数1:{0},长度:{1}".format(x,len(x)))
y = np.mgrid[1:3:1j]
print("步长为复数1j:{0},长度:{1}".format(y,len(y)))
z = np.mgrid[1:3:3j]
print("步长为复数3j:{0},长度:{1}".format(z,len(z)))
m = np.mgrid[1:3:6j]
print("步长为复数6j:{0},长度:{1}".format(m,len(m)))

2维

# 2D矩阵
x = np.mgrid[1:3:1,4:6:1]
print("1.步长为实数1,1:\n{0},\n维度:{1}\n\n".format(x,np.array(x).shape))
y = np.mgrid[1:3:3j,4:6:1]
print("2.步长为复数3j,1:\n{0},\n维度:{1}\n\n".format(y,np.array(y).shape))
z = np.mgrid[1:3:3j,4:6:3j]
print("3.步长为复数3j,3j:\n{0},维度:{1}".format(z,np.array(z).shape))

3维

  • 3D 修改j前的数值观察变化
    改x就改变每一个区间出现的次数
    改y就改变每一个区间的行数
    改z就改变列数
    大概就是这个样子
# 3D矩阵
x = np.mgrid[1:3:3j,4:6:3j,7:9:3j]
print(x,"\n维度:",np.array(x).shape)

参考链接:https://blog.csdn.net/abc13526222160/article/details/88559162

2. 在三维上绘制图形

详情请看链接!!!写的是真不错!!!

https://blog.csdn.net/u014636245/article/details/82799573

  • 主要是讲述了如何再python中创建三维坐标轴对象Axes3D
  1. 使用mpl_toolkits.mplot3d导入对象Axes3D来实现
# 使用Axes3D建立三维坐标,然后使用matplotlib绘制三维曲面
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d
import pylab as p
import mpl_toolkits.mplot3d.axes3d as p3

k,b=np.mgrid[1:3:3j,4:6:3j]
f_kb=3*k**2+2*b+1
fig = p.figure()
ax=p3.Axes3D(fig)
ax.plot_surface(k,b,f_kb,rstride=1,cstride=1)
ax.set_xlabel('k')
ax.set_ylabel('b')
ax.set_zlabel('ErrorArray')
p.show()

  1. 使用关键字projection='3d’参数生成
# 直接使用matplotlib绘制三维曲面,需要用到projection='3d'参数
import matplotlib.pyplot as plt

k,b = np.mgrid[1:3:3j,4:6:3j]
f_kb = 3*k**2+2*b+1

ax = plt.axes(projection='3d')
# ax = plt.subplot(111,projection='3d')
# rstride与cstride是渲染步长,可以得到清晰细腻的图像,越小越精细,但受到绘制前矩阵维度的限制
ax.plot_surface(k,b,f_kb,rstride=1,cstride=1,cmap='rainbow')
ax.set_xlabel('k')
ax.set_ylabel('b')
ax.set_zlabel('ErrorArray')
p.show()

在这里插入图片描述

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值