秉着边学边写边折腾的原则,开始粗糙的工作。真正掌握还是得讲解给别人听。
先给出网课
https://www.icourse163.org/course/BIT-1001871001
Mayavi官方
http://docs.enthought.com/mayavi/mayavi/index.html

这里有不少例子的,主要都是一些比较小的例子,如果有必要,就后面再单开比较大的例子。
http://docs.enthought.com/mayavi/mayavi/mlab.html#a-demo
.

本来这个文章就是断断续续的,打算单开这一篇来写一些实用的绘制实例。
如果篇幅长了,就会重开一篇,初步设想就是几个例子一篇。
所以这篇是长期随时更新的,不完结。
绘制一些好玩的图。

1

*扩展的实例。
前段时间刚开始接触机器学习,(菜鸡,你怎么才开始?啊对,就是菜鸡,就是才开始,萌新瑟瑟发抖。)
为了更好地巩固复习(现炒现卖)我决定,尽可能多做图,采用Mayavi,适当的matplotlib,这里

这是我想要的效果如下。(这个是网上偷的,我的图下面,我只绘制了1/4

1.绘制基本外形

1.设置下降起点,我选的(2,3,13),这个无所谓
2.mgrid离散网格,利用 r1 = 0.25*(x1**2+y1**2)获得网格高度r1
3.surf分别绘制渐变的surfacewireframe,并选用热辣的LUT配色方案'hot'(我喜欢),然后细节上微调线径宽度line_width=1.2opacity两种最好不一样,我们需要强调的是网格,至于surface只为了突出它的值是变化的,hot~
4.修饰outline方便观察值域,xlable这个稍微注意添加的位置,这里添加的位置是surf下,surf是全局绘制
5.绘制一个起点points3d
6.设置figurebgcolor,这里是背景色。

start_x,start_y,start_z = 2,3,13   #下降起点
figure(bgcolor=(0.5,0.5,0.5))
x1,y1 = np.mgrid[0:3:15j, 0:3:15j]    #离散不要太大,太密集不好观察
r1 = 0.25*(x1**2+y1**2)
surf(x1,y1,r1,colormap='hot',opacity=0.2)
surf(x1,y1,r1,colormap='hot',line_width=1.2,opacity=0.4,representation='wireframe')
xlabel('x')
outline(color=(1,0,0),opacity=0.8)
x_start,y_start,z_start = np.array([start_x]),np.array([start_y]),np.array([start_z])*0.25
points3d(x_start,y_start,z_start,z_start,colormap="copper",name='StartPoint',scale_factor=.05)

2.上面的部分绘制了一个下降起点和具有诱惑的网格,现在继续。

1.涉及符号计算sympy,做了必要的命名之后,diff()进行求导,机器学习里面的alp学习速率,再一并设置迭代次数times,这里我只迭代10次。
2.中间的处理我不说了,都是计算
3.从points3d开始绘制每次迭代之后产生的新的点,contour_surf这次的用法唯一特殊在于contours接受的是list,也就是以每个点所在的位置绘制等高线。quiver3d也就是这篇文章的重点了,接受了6个参数,是对位置和三个方向的向量描述。最后,plot3d把沿梯度下降的点连接起来。

theta0,theta1 = symbols('theta0,theta1')
f = theta0**2 + theta1**2
vector0,vector1 = f.diff(theta0),f.diff(theta1)  #偏微
alp = 0.1       #下降速率
times = 10      #迭代次数
kx,ky = vector0.subs(theta0,start_x),vector1.subs(theta1,start_y)
list_x,list_y,list_z = [],[],[] #[start_x],[start_y],[start_z]
vect_x,vect_y,vect_z = [],[],[]
for ti in range(times):kx,ky = vector0.subs(theta0,start_x),vector1.subs(theta1,start_y)                   #斜率vect_x.append(float(-kx));vect_y.append(float(-ky));vect_z.append(-1)start_x -= alp*kx;start_y -= alp*ky;start_z = (start_x ** 2 + start_y ** 2)*0.25    #按方向下降list_x.append(float(start_x));list_y.append(float(start_y));list_z.append(float(start_z))
sca = [3 for num in range(times)]
points3d(list_x,list_y,list_z,sca,colormap='cool',name='GradientPoint',scale_factor=.04)
contour_surf(x1,y1,r1,contours=list_z,name='GradientContour',opacity=1)
quiver3d(list_x,list_y,list_z,vect_x,vect_y,vect_z,scale_factor=.1)
plot3d(list_x,list_y,list_z,sca,name='Connection',tube_radius=None,line_width=4.2)
show()


源码我都贴出来了。也上传了。

2.f(x,y)=(1−x)^2+100(y−x^2)^2

这图不是我画的,是别人家的图
https://blog.csdn.net/pengjian444/article/details/71075544?utm_source=blogxgwz0&tdsourcetag=s_pcqq_aiomsg

.
.
.这个图的代码绘制是非常好写的,这个图原图是采用的matplotlib,先赞,做出来的图漂亮得没话说,印刷级的。
我们在Mayavi中重现它。
代码原型很简单,如下:

import numpy as np
from mayavi import mlab
x,y = np.mgrid[-3:3:40j,-1.5:3:40j]
z = (1-x)**2 + 100*(y-x**2)**2
mlab.surf()
mlab.show()

以上完成基本图形。
但是注意了,mayavi中会按照原始比例作图,z的值几k,x,y是小数点级别的变化,你会得到一个长条。所以要进行修改。
为了突出网格,

import numpy as np
from mayavi import mlab
#f(x,y)=(1−x)2+100(y−x2)2
x,y = np.mgrid[-2:2:60j,-1.5:3:60j]
z = (1-x)**2 + 100*(y-x**2)**2
z_max = np.max(z)
x_max = np.max(x)
adj_warp = x_max/z_max
sc = np.zeros_like(z)+1# adj_warp = 0.0005
mlab.surf(x,y,z,vmax=130,vmin=0,representation='wireframe',name='Grid',warp_scale=adj_warp)
mlab.surf(x,y,z,vmax=130,vmin=0,opacity=0.4,warp_scale=adj_warp)
mlab.outline(color=(1,0,0))
mlab.show()


.

中间我将继续追加梯度下降的绘制会在最后一步show()之前插入,然后会对这个图形继续进行修饰。
未更新完、

更新
2018.10.23. ——将原来写在2.1.0.5.points3d,.quiver3d下的一个举例插过来、补充f(x,y)=(1−x)^2+100(y−x^2)^2

三流Mayavi操作-Mayav-应用举例相关推荐

  1. 三流Mayavi操作-Mayav-2.1.2-图形修饰函数 Figure decoration functions

    秉着边学边写边折腾的原则,开始粗糙的工作.真正掌握还是得讲解给别人听. 先给出网课 https://www.icourse163.org/course/BIT-1001871001 Mayavi官方 ...

  2. 三流Mayavi操作-Mayav-2.1.0 绘制函数,通用参数、目录。

    秉着边学边写边折腾的原则,开始粗糙的工作.真正掌握还是得讲解给别人听. 先给出网课 https://www.icourse163.org/course/BIT-1001871001 Mayavi官方 ...

  3. 三流Mayavi操作-Mayav-2.1.2-mesh、triangular_mesh绘制

    秉着边学边写边折腾的原则,开始粗糙的工作.真正掌握还是得讲解给别人听. 先给出网课 https://www.icourse163.org/course/BIT-1001871001 Mayavi官方 ...

  4. 三流Mayavi操作-Mayav-2.1.1-图形控制函数 Figure handling functions

    秉着边学边写边折腾的原则,开始粗糙的工作.真正掌握还是得讲解给别人听. 先给出网课 https://www.icourse163.org/course/BIT-1001871001 Mayavi官方 ...

  5. 你会处理圆周率吗?----- Python操作文件应用举例

    呜呜呜,好久没更新了, 今天我们来聊聊IO流,之前我们用java中的IO流对文件进行了一些简单的操作,这次我们用Python作为基础语言来学习如何使用文件中的IO流. 有这样一道作业: 圆周率的前10 ...

  6. python使用redis在实际场景使用_用python操作redis及redis的一些应用场景

    redis安装 网上很多windows.Linux的安装教程,可根据自己的需要寻找对应教程安装 redis-py安装 pip install redis redis可视化工具 API的使用 redis ...

  7. 转 C#对多个集合和数组的操作(合并,去重,判断)

    在开发过程中.数组和集合的处理是最让我们担心.一般会用for or foreach 来处理一些操作.这里介绍一些常用的集合跟数组的操作函数. 首先举例2个集合A,B. List<int> ...

  8. Python学习入门基础教程(learning Python)--5.5 Python写操作详解

    在前文5.3节我们简单的学习了如何在Python里进行文件的写操作,所举例里写入的都是字符串数据,那我们现在想写入数值型数据可以直接写入么?我们先看看下边的程序是否能正常运行? wfile = ope ...

  9. PySpark:DataFrame及其常用列操作

    Spark版本:V3.2.1 1. DataFrame 虽然RDD是Spark最基本的抽象,但RDD的计算函数对Spark而言是不透明的.也就是说Spark并不知道你要在计算函数里干什么.无论你是要做 ...

最新文章

  1. JVM:垃圾回收相关算法
  2. R语言ggplot2可视化移除轴标签、图例、主体等所有附属信息实战
  3. checkbox已设置为checked--true-但不勾选问题解决方法(只第一次勾选有效)
  4. [Luogu 1351] NOIP2014 联合权值
  5. Learning Scrapy笔记(五)- Scrapy登录网站
  6. python进阶07 MySQL
  7. ubuntu 下的开发板的环境配置
  8. 【Linux系统】部分基础命令手册
  9. chromebook 笔记本 TrueNas 设置 wifi 连网
  10. Ubuntu 安装MinGW32出现Unable to locate package mingw32找不到安装包的解决方法和思路
  11. 华为将安卓系统迁移到鸿蒙OS,真·国产之光!华为鸿蒙OS发布,从安卓迁移只需要2天...
  12. 使用Canvas把照片转换成素描画
  13. 基于Opencv的图像卡通化
  14. 谷歌SEO英文外链建设指南
  15. python是哪种动物_基于Python的动物识别专家系统
  16. 疫情宅家厨艺秀 | 究竟是自学成大厨,还是厨房大翻车?
  17. STM32学习之新建工程模板
  18. ContentType 清单大全
  19. 定位教程5---移动相机
  20. 美国访问学者生活需要注意的七大事项

热门文章

  1. 老猿说说-CopyOnWriteArrayList
  2. 海康威视 java sdk 抓拍功能
  3. Python中isdigit()
  4. 场景理解--场景分类
  5. Windows sklearn安装
  6. 谷粒商城笔记+踩坑(19)——订单模块构建、登录拦截器
  7. css3探测光圈_CSS3按钮鼠标悬浮光圈效果
  8. 1.1计算机安全的概念(持续更新)
  9. 育儿品牌“亲宝宝”获数亿元C轮融资,好未来领投,顺为、复星跟投
  10. 【目标检测】|少样本检测