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批量修改文件后缀的方法
Jan 26 Python
Python命令行参数解析模块getopt使用实例
Apr 13 Python
Python中用于转换字母为小写的lower()方法使用简介
May 19 Python
Python排序算法实例代码
Aug 10 Python
Python入门之三角函数atan2()函数详解
Nov 08 Python
python中yaml配置文件模块的使用详解
Apr 27 Python
Python3.5文件读与写操作经典实例详解
May 01 Python
Python实现的插入排序,冒泡排序,快速排序,选择排序算法示例
May 04 Python
python写程序统计词频的方法
Jul 29 Python
python list数据等间隔抽取并新建list存储的例子
Nov 27 Python
Python基于gevent实现高并发代码实例
May 15 Python
如何使用 Python 读取文件和照片的创建日期
Sep 05 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超级全局变量
2010/01/26 PHP
两种设置php载入页面时编码的方法
2014/07/29 PHP
PHP输入输出流学习笔记
2015/05/12 PHP
php将字符串随机分割成不同长度数组的方法
2015/06/01 PHP
PHP读MYSQL中文乱码的快速解决方法
2016/10/01 PHP
php将服务端的文件读出来显示在web页面实例
2016/10/31 PHP
php判断是否连接上网络的方法实例详解
2016/12/14 PHP
PHP连接SQL Server的方法分析【基于thinkPHP5.1框架】
2019/05/06 PHP
详解phpstorm2020最新破解方法
2020/09/17 PHP
Web开发之JavaScript
2012/03/29 Javascript
web css实现整站样式互相切换
2013/10/29 Javascript
jquery选择器之基本过滤选择器详解
2014/01/27 Javascript
jquery实现的网页自动播放声音
2014/04/30 Javascript
JS实现方向键切换输入框焦点的方法
2015/08/19 Javascript
利用D3.js实现最简单的柱状图示例代码
2016/12/09 Javascript
深入理解vue中的$set
2017/06/01 Javascript
vue移动端路由切换实例分析
2018/05/14 Javascript
10种JavaScript最常见的错误(小结)
2019/06/21 Javascript
详解微信小程序中var、let、const用法与区别
2020/01/11 Javascript
[33:17]OG vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
简单分析Python中用fork()函数生成的子进程
2015/05/04 Python
python 列表,数组,矩阵两两转换tolist()的实例
2018/04/04 Python
python模块smtplib实现纯文本邮件发送功能
2018/05/22 Python
python与C、C++混编的四种方式(小结)
2019/07/15 Python
django 中使用DateTime常用的时间查询方式
2019/12/03 Python
pytorch梯度剪裁方式
2020/02/04 Python
python rolling regression. 使用 Python 实现滚动回归操作
2020/06/08 Python
Python下载网易云歌单歌曲的示例代码
2020/08/12 Python
Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
2015/01/27 面试题
银行自荐信范文
2013/10/07 职场文书
文明美德伴我成长演讲稿
2014/05/12 职场文书
志愿者宣传口号
2014/06/17 职场文书
诉讼代理人授权委托书
2014/10/11 职场文书
小学教育见习报告
2014/10/31 职场文书
农村环境卫生倡议书
2015/04/29 职场文书
如何书写民事调解协议书?
2019/06/25 职场文书