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检测lvs real server状态
Jan 22 Python
python实现哈希表
Feb 07 Python
Python continue语句用法实例
Mar 11 Python
利用Python实现简单的相似图片搜索的教程
Apr 23 Python
简单的连接MySQL与Python的Bottle框架的方法
Apr 30 Python
python strip() 函数和 split() 函数的详解及实例
Feb 03 Python
python 类对象和实例对象动态添加方法(分享)
Dec 31 Python
Pipenv一键搭建python虚拟环境的方法
May 22 Python
对python3 中方法各种参数和返回值详解
Dec 15 Python
django-xadmin根据当前登录用户动态设置表单字段默认值方式
Mar 13 Python
详解python polyscope库的安装和例程
Nov 13 Python
Python之matplotlib绘制折线图
Apr 13 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
一段php加密解密的代码
2006/10/09 PHP
php学习之 认清变量的作用范围
2010/01/26 PHP
php 注释规范
2012/03/29 PHP
php日历制作代码分享
2014/01/20 PHP
PHP中if和or运行效率对比
2014/12/12 PHP
yiic命令时提示“php.exe”不是内部或外部命令的解决方法
2014/12/18 PHP
PHP文件上传之多文件上传的实现思路
2016/01/27 PHP
php面向对象值单例模式
2016/05/03 PHP
jquery和javascript的区别(常用方法比较)
2013/07/04 Javascript
js校验表单后提交表单的三种方法总结
2014/02/28 Javascript
JavaScript函数模式详解
2014/11/07 Javascript
JS在一定时间内跳转页面及各种刷新页面的实现方法
2016/05/26 Javascript
javascript解决小数的加减乘除精度丢失的方案
2016/05/31 Javascript
Javascript实现图片懒加载插件的方法
2016/10/20 Javascript
Vue-CLI3.x 设置反向代理的方法
2018/12/06 Javascript
Vue实现商品分类菜单数量提示功能
2019/07/26 Javascript
JS浮点数运算结果不精确的Bug解决
2019/08/01 Javascript
[00:30]明星选手化身超级英雄!2018DOTA2亚洲邀请赛全明星赛来临!
2018/04/06 DOTA
Python中使用异常处理来判断运行的操作系统平台方法
2015/01/22 Python
在Python下使用Txt2Html实现网页过滤代理的教程
2015/04/11 Python
Python的Django框架安装全攻略
2015/07/15 Python
wxPython实现文本框基础组件
2019/11/18 Python
python进度条显示-tqmd模块的实现示例
2020/08/23 Python
python 通过 pybind11 使用Eigen加速代码的步骤
2020/12/07 Python
中国领先的专业家电网购平台:国美在线
2016/12/25 全球购物
波兰珠宝品牌:YES
2019/08/09 全球购物
应届生财务会计求职信
2013/11/05 职场文书
音乐教学随笔感言
2014/02/19 职场文书
体育教师求职信
2014/05/24 职场文书
旅游饭店管理专业自荐书
2014/06/28 职场文书
企业党的群众路线教育实践活动学习心得体会
2014/10/31 职场文书
网上祭英烈活动总结
2015/02/04 职场文书
公司年会主持词范文!
2019/05/07 职场文书
JavaScript 数组去重详解
2021/09/15 Javascript
利用Python实时获取steam特惠游戏数据
2022/06/25 Python
Valheim服务器 Mod修改安装教程 【ValheimPlus】
2022/12/24 Servers