Python3.0科学计算学习之绘图(二)
(1) np.mashgrid()函数:-----生成网络点坐标矩阵,可以是二维网络矩阵,也可以是三维网络矩阵。其中,每个交叉点就是网络点,描述这些网络点的矩阵就是坐标矩阵(横坐标矩阵X中的每个元素与纵坐标矩阵Y中对应位置元素,共同构成一个点的完整坐标)。
背景示例:网络点与坐标矩阵的解释如下:
import numpy as np
import matplotlib.pyplot as plt
x=np.array([[0,1,2],[0,1,2]]) #最简单的方法是,可以把横纵坐标矩阵X,Y写出来,生成坐标点
y=np.array([[0,0,0],[1,1,1]])
plt.plot(x,y,color='red',marker='.',markersize=10,linestyle='-.') #点的形状为原点,点设置大一些,线性为电划线。
plt.grid(True)
plt.show()
注意:按照矩阵给坐标点信息,matplotlib会把横坐标矩阵中,每一列的点当做同一条线。正如上例中把plot的linestyle=’ ‘改为linestyle=’-.’就会发现A-D,B-E,C-F是连接的。


对于很多网络点的情况,可用如下meshgrid()函数方法:
因注意到坐标矩阵其中有大量的重复---X的每一行都一样,Y的每一列都一样。故基于此规律性,numpy提供的np.meshgrid()函数可以快速生成坐标矩阵X,Y
x=np.linspace(-0.5,2.,10)
y=np.linspace(-1.5,4.,10)
X,Y=np.meshgrid(x,y) #输入的x,y是网络点的横纵坐标列向量(非矩阵),输出的X,Y就是坐标矩阵。
plt.plot(X,Y,color='limegreen',marker='.',linestyle='')
plt.grid(True)
plt.show()

(2) Python可视化库matplotlib.pyplot里contour()与contourf()函数
区别:contour()和counterf() 函数功能相同,都是画三维等高线图的,不同点在于contourf会根据不同的水平值用不同的颜色来填充绘图(即会对等高线间的区域进行填充)。
contour()和counterf() 都是绘制三维图,其中前两个参数x和y为两个等长一维数组,第三个参数z为二维数组(表示平面点xi和yi映射的函数值)。
matplotlib等高线的绘制步骤:
等高线是三维图像在二维空间的投影
l 首先准备三维函数及待投影平面的网格坐标。
import numpy as np
import matplotlib.pyplot as plt
def height(x,y):
return (1-x/2+x**5+y**3)*np.exp(-x**2-y**2)
x=np.linspace(-3,3,300)
y=np.linspace(-3,3,300)
X,Y=np.meshgrid(x,y)
l 绘制等高线
C=plt.contour(X,Y,height(X,Y),10,colors='black') # 10代表等高线的密集程度。如果是0,则图像被一分为二
plt.contourf(X,Y,height(X,Y),10,alpha=0.75,cmap=plt.cm.hot)
#为等高线填充颜色 10表示按照高度分成10层 alpha表示透明度 cmap表示渐变标准
l 添加高度与数字
plt.clabel(C,inline=True,fontsize=10) #inline=True表示高度写在等高线上
plt.xticks(())
plt.yticks(())
#去掉坐标轴刻度
plt.show()
#显示图片
l 最后结果图为:

实例:寻找某一函数的最小值
import numpy as np
import matplotlib.pyplot as plt
import scipy.optimize as so
rosenbrockfunction=lambda x,y: (1-x)**2+100*(y-x**2)**2 #使用lambda关键字所表示的匿名函数来使代码变得更加简洁
x=np.linspace(-.5,2.,100)
y=np.linspace(-1.5,4.,100)
X,Y=np.meshgrid(x,y)
Z=rosenbrockfunction(X,Y)
cs=plt.contour(X,Y,Z,np.logspace(0,3.5,7,base=10),cmap='gray') #以第四个参数给出的值为标准来绘制等高线并用gray颜色绘图
#plt.contourf(X,Y,Z,10,alpha=0.75,cmap='gray')
rosen=lambda x:rosenbrockfunction(x[0],x[1])
solution,iterates=so.fmin_powell(rosen,x0=np.array([0,-0.7]),retall=True)
#迭代方法so.fmin_powell利用鲍威尔方法来寻找最小值(由一个给定的起始值x0开始,并且当给出选项retall=True时报告所有的迭代,经过16次迭代后得出x=0,y=0)
x,y=zip(*iterates)
plt.plot(x,y,'ko')
plt.plot(x,y,'k:',linewidth=1)
plt.title('Steps of powells method to compute a minimum')
plt.clabel(cs)
#clabel使用该contour创建的一个等值线集对象来注释对应函数值的水平值
补充:np.logspace()常用于创建等比数列,它也有常用的3个参数,第一个参数表示起始点的指数,第二个参数终止点的指数,第三个参数表示数列的个数;最后,通过base参数可以修改底数;

(4) 图像
Imshow()函数:用于在指定的窗口中显示一幅图像。它负责对图像进行处理,并显示其格式,但是不显示图片,其后跟着plt.show()才能显示出来。
imshow图像显示函数:imshow(f,G) 其中,f是函数,G是显示该图像的灰度级数。
Imshow(f,[low,high]) 小于或者等于low的值都显示为黑色,大于或等于high的值都显示为白色
Imshow(f,[ ]) [ ] 自动将low设为函数最小值,将high设为函数最大值。
Colorbar:增加颜色类标的代码是plt.colorbar()
例如:import numpy as np
import matplotlib.pyplot as plt
X=np.array([[1,2],[3,4],[5,6]])
plt.imshow(X)
plt.colorbar()
plt.show()

实例:将数组可视化为图像,
import numpy as np
import matplotlib.pyplot as plt
# 下面代码演示了如何通过meshgrid生成复数参数值的矩阵:
def mandelbrot(h,w,maxit=20):
X,Y=np.meshgrid(np.linspace(-2,0.8,w),np.linspace(-1.4,1.4,h))
c=X+Y*1j
z=c
exceeds=np.zeros(z.shape,dtype=bool)
for iteration in range(maxit):
z=z**2+c
exceeded=np.abs(z) > 4
exceeds_now=exceeded & (np.logical_not(exceeds))
exceeds[exceeds_now] = True
z[exceeded]=2
return (exceeds)
#命令imshow将矩阵展示为图像,所选的颜色贴图显示了序列出现的白色无界的区域,而其他区域显示为黑色。
plt.imshow(mandelbrot(400,400),cmap='gray')
plt.axis('off') #使用plt.axis('off') 关闭坐标轴
plt.show()
# 使用imshow的无插值的图像

注意:imshow命令默认使用插值使图像看起来更好,这在矩阵较小时可以看的很清楚。
plt.imshow(mandelbrot(400,400),interpolation='nearest',cmap='gray')
Interpolation代表插值运算,nearest表示最近邻近插值法,只是插值方式中的一种。
cmap表示绘图时的样式,这里选择的是ocean主题。
#使用最近邻近插值法所得的图像

Python3.0科学计算学习之绘图(二)的更多相关文章
- Python3.0科学计算学习之绘图(一)
基本绘图: (1) plot是标准的绘图库,调用函数plot(x,y)就可以创建一个带有绘图的图形窗口(其中y是x的函数).输入的参数为具有相同长度的数组(或列表):或者plot(y)是plot(r ...
- Python3.0科学计算学习之绘图(三)
matplotlib对象: 使用matplotlib的pyplot模块,可以供用户直接使用最重要的绘图命令.多数情况下,我们希望创建一个图形并且立即展示出来,但是有时如果生成要通过更改其属性来修改的图 ...
- Python3.0科学计算学习之绘图(四)
绘制三维图: mplot3d工具包提供了点.线.等值线.曲面和所有其他基本组件以及三维旋转缩放的三维绘图. 1.散点的三维数据图 from mpl_toolkits.mplot3d import ax ...
- Python3.0科学计算学习之函数
函数 函数允许程序的控制在不同的代码片段之间切换,函数的重要意义在于可以在程序中清晰地分离不同的任务,将复杂的问题分解为几个相对简单的子问题,并逐个解决.即"分而治之". Pyth ...
- Python3.0科学计算学习之类
类: Python中的类是一个抽象的概念,甚至比函数还要抽象.可以把它简单的看作是数据以及由存取.操作这些数据的方法所组成的一个集合.类是Python的核心概念,是面向对象编程的基础. 类有如下的优点 ...
- python3在科学计算中的三种常用数据结构
在科学研究中,数据运算是必不可少的,下面介绍python语言在科学计算中常用的数据结构和运算函数. 主要数据结构: (1)列表,用中括号表示,元素之间逗号分隔,每个元素可以是数字,字符,也可以是列表, ...
- Python科学计算学习之高级数组(二)
代码性能和向量化 背景:Python是一种解释型的编程语言,基本的python代码不需要任何中间编译过程来得到机器代码,而是直接执行.而对于C.C++等编译性语言就需要在执行代码前将其编译为机器指令. ...
- Python科学计算学习一 NumPy 快速处理数据
1 创建数组 (1) array(boject, dtype=None, copy=True, order=None, subok=False, ndmin=0) a = array([1, 2, 3 ...
- 【英宝通Unity4.0公开课学习 】(二)场景创建
本讲共四节,貌似讲课老师的速度变快了,2倍速听不清了...调成了1.7倍...老师果然越来越熟练了啊! 而且最开始的萌妹纸也不再出现在视频里了,我当时还想着完全可以换成老师自己提问嘛! 不过有妹纸声音 ...
随机推荐
- Mysql的学习笔记03
---恢复内容开始--- Mysql 的视图 1 view 在查询中,我们经常把查询结果当成临时表来看, view 是什么? View 可以看成一张虚拟的表,是表通过某种运算得到的有一个投影. 2 ...
- JS对象的拷贝
1:对数据进行备份的时候,如果这个数据是基本的数据类型,那么很好办,通过赋值实现复制即可. 赋值与浅拷贝的区别 var obj1 = { 'name' : 'zhangsan', 'age' : '1 ...
- 【Linux】使用Nginx发布dotnet的网站
1.安装Nginx[自行百度] 2.安装dotnet运行时[自行百度] 3.配置Nginx—— /etc/nginx/conf.d/default.conf server { listen ; se ...
- Hibernate 映射多对多关联关系
映射多对多,需要建立一张中间表 一共三张表,一个是 Category,一个是 Item,还有一个是 Categories_Items Categories_Items 作为中间表,其包含两个列,分别对 ...
- Java 多线程 sleep()方法与yield()方法的区别
sleep()方法与yield()方法的区别如下: 1 是否考虑线程的优先级不同 sleep()方法给其他线程运行机会时不考虑线程的优先级,也就是说,它会给低优先级的线程运行的机会.而yield()方 ...
- github第一次引用开源的库
想要使用这个一个东西 第一步就是在中添加上面那句话. 这个应该是俩种使用方法,一种用于java中一个用作控件引用 此时就能使用我们引用的这个库了.
- word使用新技能
office2013版,菜单栏-审阅-修订-所有标记,可以显示编辑过程中的所有修改步骤,还可查看未修改的原始状态.前提是“修订”按钮 要点亮! 给文档添加索引,并自动生成索引列表 文件-选项-显示-隐 ...
- 分布式mongodb分片集群
本博客先简单介绍mongodb入门以及单实例以及mongodb的主从(主从官网是不提倡用的,原因后续介绍),副本集,分片. 第一:nosql介绍: 数据库分为关系型数据库与非关系型数据库,及具代表性的 ...
- Oracle 用户权限 Grant
用户的权限来自系统权限和对象权限 一.系统权限 3个索引权限 Grant CREATE ANY INDEX to User_Name://创建索引 Grant ALTER ANY INDEX to U ...
- Hibernate-day03
双向的many2one/one2many 双向many2one/one2many的问题:一定有额外的SQL发出;在数据库里面,外键表示many2one或者one2many的关系,外键是没有方向的;但是 ...