Python中三维坐标空间绘制的实现


Posted in Python onSeptember 22, 2020

在三维空间绘制点,线,面

1.绘制点

用scatter()散点绘制三维坐标点

from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
dot1 = [[0, 0, 0], [1, 1, 1], [
  2, 2, 2], [2, 2, 3], [2, 2, 4]] # 得到五个点
plt.figure() # 得到画面
ax1 = plt.axes(projection='3d')
ax1.set_xlim(0, 5) # X轴,横向向右方向
ax1.set_ylim(5, 0) # Y轴,左向与X,Z轴互为垂直
ax1.set_zlim(0, 5) # 竖向为Z轴
color1 = ['r', 'g', 'b', 'k', 'm']
marker1 = ['o', 'v', '1', 's', 'H']
i = 0
for x in dot1:
  ax1.scatter(x[0], x[1], x[2], c=color1[i],
        marker=marker1[i], linewidths=4) # 用散点函数画点
  i += 1
plt.show()

Python中三维坐标空间绘制的实现

2.绘制线

函数plot3D(xs, ys, *args, zdir=‘z', **kwargs),用于绘制三维坐标的线,其参数使用说明如下.
(1)xs,ys,zdir=‘z': 设置(x,y,z)坐标值,为集合对象,是该函数与plot()的唯一区别.
(2) kwargs:接受键值对参数,使用方法同plot()

from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
plt.figure()
ax = plt.subplot(111, projection='3d')
ax.set_xlim(0, 20) # X轴,横向向右方向
ax.set_ylim(20, 0) # Y轴,左向与X,Z轴互为垂直
ax.set_zlim(0, 20) # 竖向为Z轴
z = np.linspace(0, 4*np.pi, 500)
x = 10*np.sin(z)
y = 10*np.cos(z)
ax.plot3D(x, y, z, 'black') # 绘制黑色空间曲线
# ----------------------------------------------------------
z1 = np.linspace(0, 4*np.pi, 500)
x1 = 5*np.sin(z1)
y1 = 5*np.cos(z1)
ax.plot3D(x1,y1,z1,'g--')   #绘制绿色空间虚曲线
#------------------------------------------------------------
ax.plot3D([0,18,0],[5,18,10],[0,5,0],'om-')  #绘制带o折线
plt.show()

Python中三维坐标空间绘制的实现

3.绘制面

3D 图形需要的数据与等高线图基本相同:X、Y 数据决定坐标点,Z 轴数据决定 X、Y 坐标点对应的高度。与等高线图使用等高线来代表高度不同,3D 图形将会以更直观的形式来表示高度。
为了绘制 3D 图形,需要调用 Axes3D 对象的 plot_surface()方法来完成。

from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
import numpy as np
fig = plt.figure(figsize=(15, 5))
ax = fig.add_subplot(131, projection='3d') # 第一个绘图区
x = np.arange(1, 50, 1)
y = np.arange(1, 50, 1)
X, Y = np.meshgrid(x, y) # 将坐标向量(x,y)变为坐标矩阵(X,Y)


def Z(X, Y): # 自定义求Z向量的函数
  return X*0.2+Y*0.3+20


s1 = ax.plot_surface(X, Y, Z(X, Y), rstride=10,
           cstride=10, cmap=cm.jet, linewidth=1,
          antialiased=True)  #绘制面
ax.set_xlim3d(0,50)  #指定x轴坐标值范围
ax.set_ylim3d(0,50)  #指定y轴坐标值范围
ax.set_zlim3d(0,50)  #指定z轴坐标值范围 
fig.colorbar(s1,shrink=1,aspect=5)  
#------------------------------------------
ax1 = fig.add_subplot(132,projection='3d')  #第二个绘图区
s2 = ax1.plot_surface(X,Y,Z(X,Y),rstride=1,
           cstride=1, cmap=cm.jet, linewidth=1,
          antialiased=False)  #绘制面
fig.colorbar(s2,shrink=0.5,aspect=5)
#--------------------------------------------
d = 0.05
x1 = np.arange(-4,4,d)
y1 = np.arange(-3,3,d)
X1,Y1 = np.meshgrid(x1,y1)
def Z1(X,Y):         #自定义求z向量的函数
  z1 = np.exp(-X**2-Y**2)
  z2 = np.exp(-(X-1)**2-(Y-1)**2)
  return (z2-z1)*2       #返回Z坐标值
ax2 = fig.add_subplot(133,projection='3d')
s3 = ax2.plot_surface(X,Y,Z(X,Y),rstride=1,
           cstride=1, cmap=cm.jet, linewidth=1,
          antialiased=False)
fig.colorbar(s3,shrink=0.5,aspect=5)
plt.show()

Python中三维坐标空间绘制的实现

到此这篇关于Python中三维坐标空间绘制的实现的文章就介绍到这了,更多相关Python 三维坐标空间内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python中使用gzip模块压缩文件的简单教程
Apr 08 Python
详解tensorflow实现迁移学习实例
Feb 10 Python
python ChainMap 合并字典的实现步骤
Jun 11 Python
pandas中的series数据类型详解
Jul 06 Python
python 调用pyautogui 实时获取鼠标的位置、移动鼠标的方法
Aug 27 Python
python 默认参数相关知识详解
Sep 18 Python
Python3的socket使用方法详解
Feb 18 Python
python简单的三元一次方程求解实例
Apr 02 Python
python爬虫学习笔记之Beautifulsoup模块用法详解
Apr 09 Python
使用Pycharm分段执行代码
Apr 15 Python
python实现密码验证合格程序的思路详解
Jun 01 Python
python中对二维列表中一维列表的调用方法
Jun 07 Python
Pyinstaller打包Scrapy项目的实现步骤
Sep 22 #Python
Python使用pickle进行序列化和反序列化的示例代码
Sep 22 #Python
Python如何获取文件路径/目录
Sep 22 #Python
JupyterNotebook 输出窗口的显示效果调整实现
Sep 22 #Python
python 实现压缩和解压缩的示例
Sep 22 #Python
python 无损批量压缩图片(支持保留图片信息)的示例
Sep 22 #Python
Pytho爬虫中Requests设置请求头Headers的方法
Sep 22 #Python
You might like
操作Oracle的php类
2006/10/09 PHP
详解php的魔术方法__get()和__set()使用介绍
2012/09/19 PHP
基于PHPExcel的常用方法总结
2013/06/13 PHP
php的XML文件解释类应用实例
2014/09/22 PHP
php结合js实现点击超链接执行删除确认操作
2014/10/31 PHP
php实现图片文件与下载文件防盗链的方法
2014/11/03 PHP
php服务器的系统详解
2019/10/12 PHP
推荐dojo学习笔记
2007/03/24 Javascript
js querySelector和getElementById通过id获取元素的区别
2012/04/20 Javascript
jquery教程限制文本框只能输入数字和小数点示例分享
2014/01/13 Javascript
js浏览器本地存储store.js介绍及应用
2014/05/13 Javascript
javascript删除html标签函数cIsHTML
2017/01/09 Javascript
javascript设计模式之单体模式学习笔记
2017/02/15 Javascript
Node.js学习之TCP/IP数据通讯(实例讲解)
2017/10/11 Javascript
微信小程序使用component自定义toast弹窗效果
2018/11/27 Javascript
基于nodejs的微信JS-SDK简单应用实现
2019/05/21 NodeJs
前端插件之Bootstrap Dual Listbox使用教程
2019/07/23 Javascript
[02:19]2014DOTA2国际邀请赛 专访820少年们一起去追梦吧
2014/07/14 DOTA
[02:23]2018DOTA2亚洲邀请赛趣味视频——反应测试
2018/04/04 DOTA
使用scrapy实现爬网站例子和实现网络爬虫(蜘蛛)的步骤
2014/01/23 Python
Python警察与小偷的实现之一客户端与服务端通信实例
2014/10/09 Python
Python中函数的参数传递与可变长参数介绍
2015/06/30 Python
Python算法之求n个节点不同二叉树个数
2017/10/27 Python
Python使用Matplotlib实现Logos设计代码
2017/12/25 Python
Django项目中model的数据处理以及页面交互方法
2018/05/30 Python
详解Python 字符串相似性的几种度量方法
2019/08/29 Python
在notepad++中实现直接运行python代码
2019/12/18 Python
Hobbs官方网站:英国奢华女性时尚服装
2020/02/22 全球购物
几个人围成一圈的问题
2013/09/26 面试题
上海微创软件面试题
2012/06/14 面试题
大型车展策划方案
2014/02/01 职场文书
联谊活动总结
2014/08/28 职场文书
初中班主任工作总结2015
2015/05/13 职场文书
了解Redis常见应用场景
2021/06/23 Redis
Python实现滑雪小游戏
2021/09/25 Python
MySQL安装失败的原因及解决步骤
2022/06/14 MySQL