matplotlib对象:

使用matplotlib的pyplot模块,可以供用户直接使用最重要的绘图命令。多数情况下,我们希望创建一个图形并且立即展示出来,但是有时如果生成要通过更改其属性来修改的图形,就需要用面向对象的方式来处理图形对象。

(1) 坐标轴对象:创建一个需要稍后修改的绘图时,需要引入一个图形和坐标轴对象。

l 首先,创建一个图形,然后在该图形中定义一些坐标轴以及这些坐标轴的位置,记住要将这些对象赋值给变量。

fig=plt.figure(1)

ax=plt.subplot(111)   #plt.subplot()生成子图,不能通过空figure绘图,必须用add_subplot()创建一个或者多个子subplot绘图区才能绘图,一个图形可以有多个坐标轴对象

接着, 将图形与给定的坐标轴对象相关联

import numpy as np

import matplotlib.pyplot as plt

fig=plt.figure(1)

ax=plt.subplot(111)

x=np.linspace(0,2*np.pi,100)

amod_sin = lambda x:(1.-0.1*np.sin(25*x))*np.sin(x)

ax.plot(x,np.sin(x),label='sin')    #设置正弦曲线

ax.plot(x,amod_sin(x),label='modsin')

plt.legend()

#所得图形如下:

(2) 修改线条属性:是通过其标签识别了特定的线条对象,其是索引了i1的列表中的一个元素,可通过相应的setter()方法来更改线条属性,如下实例

import numpy as np

import matplotlib.pyplot as plt

fig=plt.figure()

ax=plt.subplot(111)

x=np.linspace(0,2*np.pi,100)

amod_sin = lambda x:(1.-0.1*np.sin(25*x))*np.sin(x)

ax.plot(x,np.sin(x),label='sin')

ax.plot(x,amod_sin(x),label='modsin')

plt.legend()       #同上

ax.lines           #这两个绘图命令使用两个Line2D对象来填充列表ax.lines

#使用标签,使以后能够采用简单的方式来识别对象

for i1,line in enumerate(ax.lines):

if line.get_label()=='sin':

break

ax.lines[i1].set_linestyle('-.')    #通过相应的setter()方法更改属性

ax.lines[i1].set_linewidth(2)

#修改数据

ydata=ax.lines[i1].get_ydata()

ydata[-1]=-0.5

ax.lines[i1].set_ydata(ydata)

#运行结果如下:最后一个数据点损坏的曲线。

(3) 注释

使用annotate方法在给定位置和坐标点上设置注释

语法说明:annotate(s=str,xy=(x,y),xytext=(i1,i2),;...)

其中:s为注释文本内容;   xy为被注释的坐标;   xytext为注释文字的坐标位置

extcoords设置注释文字偏移量;

arrowprops箭头参数,参数类型为字典(由字典所指定的箭头属性),其中:

width  点箭头的宽度       headwidth在点的箭头底座的宽度

shrink总长度为分数,“缩水”从两端    facecolor表示箭头颜色

bbox给标题添加外框,常用参数如下:boxstyle方框外形

facecolor背景颜色,  edgecolor边框线条颜色,  edgewidth边框线条大小

实例如下:

annot1=ax.annotate('已调幅的曲线',(2.1,1.0),(3.2,0.5),

arrowprops={'width':2,'color':'k','connectionstyle':'arc3,rad=+0.5','shrink':0.05},

verticalalignment='bottom',horizontalalignment='left',fontsize=15,

bbox={'facecolor':'gray','alpha':0.1,'pad':10})

# ## 该注释中,箭头指向坐标为(2.1,1.0)的点,文本的左下坐标为(3.2,0.5)。

演示了由arrowprop字典所指定的箭头属性,由shrink键来缩放箭头,设置为0.05就是表示将箭头大小减小5%,以保持与其指向的线性的距离。箭头遵循样条弧形状或者使用connectionstyle键来设置其他形状。

annot2=ax.annotate('已损坏的数据',(6.3,-0.5),(6.1,-1.1),

arrowprops={'width':0.5,'color':'k','shrink':0.05},

horizontalalignment='center',fontsize=12)

注释删除:可以将注释对象分配给一个变量,这样可以通过其remove方法来删除注释

例如:annot1.remove()

(4) 曲线间的填充面积

plt.fill_between()函数对图像进行填充

填充是突出曲线间差异的理想工具,fill_between(x,y1,y2) 函数用来填充y1,y2两个函数之间的区域

实例:Python中利用matplotlib进行曲线的部分填充:

情形一:axf=ax.fill_between(x,np.sin(x),amod_sin(x),facecolor='gray')

情形二:填充指定区域:

#在fill_between中使用where语句进行填充,where是一个非常便捷的参数,需要一个布尔数组来指定额外的填充条件,用来选择要填充的区域的布尔数组是amod_sin(x)-np.sin(x)>0

axf=ax.fill_between(x,np.sin(x),amod_sin(x),where=amod_sin(x)-np.sin(x)>0,facecolor='gray')

(5) 刻度与刻度标签

实例:通过删除X轴和Y轴的刻度以及引入与问题相关的刻度标签来简化图片。

ax.set_xticks(np.array([0,np.pi/2,np.pi,3/2*np.pi,2*np.pi]))

ax.set_xticklabels(('$0$','$\pi/2$','$\pi$','$3/2 \pi$','$2\pi$'),fontsize=18)

ax.set_yticks(np.array([-1,0.,1]))

ax.set_yticklabels(('$-1$','$0$','$1$'),fontsize=18)

#注意:在字符串中使用LaTeX格式来表示希腊字母、正确设置公式并使用LaTeX字体。

#已调幅的正弦函数的完整示例图:

Python3.0科学计算学习之绘图(三)的更多相关文章

  1. Python3.0科学计算学习之绘图(一)

    基本绘图: (1)  plot是标准的绘图库,调用函数plot(x,y)就可以创建一个带有绘图的图形窗口(其中y是x的函数).输入的参数为具有相同长度的数组(或列表):或者plot(y)是plot(r ...

  2. Python3.0科学计算学习之绘图(二)

    (1) np.mashgrid()函数:-----生成网络点坐标矩阵,可以是二维网络矩阵,也可以是三维网络矩阵.其中,每个交叉点就是网络点,描述这些网络点的矩阵就是坐标矩阵(横坐标矩阵X中的每个元素与 ...

  3. Python3.0科学计算学习之绘图(四)

    绘制三维图: mplot3d工具包提供了点.线.等值线.曲面和所有其他基本组件以及三维旋转缩放的三维绘图. 1.散点的三维数据图 from mpl_toolkits.mplot3d import ax ...

  4. Python3.0科学计算学习之函数

    函数 函数允许程序的控制在不同的代码片段之间切换,函数的重要意义在于可以在程序中清晰地分离不同的任务,将复杂的问题分解为几个相对简单的子问题,并逐个解决.即"分而治之". Pyth ...

  5. Python3.0科学计算学习之类

    类: Python中的类是一个抽象的概念,甚至比函数还要抽象.可以把它简单的看作是数据以及由存取.操作这些数据的方法所组成的一个集合.类是Python的核心概念,是面向对象编程的基础. 类有如下的优点 ...

  6. python3在科学计算中的三种常用数据结构

    在科学研究中,数据运算是必不可少的,下面介绍python语言在科学计算中常用的数据结构和运算函数. 主要数据结构: (1)列表,用中括号表示,元素之间逗号分隔,每个元素可以是数字,字符,也可以是列表, ...

  7. Python科学计算学习之高级数组(二)

    代码性能和向量化 背景:Python是一种解释型的编程语言,基本的python代码不需要任何中间编译过程来得到机器代码,而是直接执行.而对于C.C++等编译性语言就需要在执行代码前将其编译为机器指令. ...

  8. 【英宝通Unity4.0公开课学习 】(三)脚本使用

    清明出去放松了一天. 看了下大姑爷,然后去大姑家吃了个午饭,下午三点左右出去找煤球耍,在他们学校和良乡镇逛了一下.当时感觉离北京好远好远啊... 其实不得不说现在的交通确实很方便,到哪都要不了几天,如 ...

  9. Python科学计算学习一 NumPy 快速处理数据

    1 创建数组 (1) array(boject, dtype=None, copy=True, order=None, subok=False, ndmin=0) a = array([1, 2, 3 ...

随机推荐

  1. 一次lr异常Error: C interpreter run time error: Action.c (17): Error -- memory violation : Exception ACCESS_VIOLATION received问题分析

    今天qq群里人问我一个问题 人家的原始问题如下: 问题是为啥通过lr_save_string取不到参数值 由于别的问题,我也需要调试,但是没有环境,只能模拟场景,如下 他想将token变量换成lr中的 ...

  2. Pop Star 1.2.5

    原文链接https://www.cnblogs.com/zhouzhendong/p/Pop-Star.html 是VB写的. 年代久远,代码太丑,原码不公开. 下载链接 仅支持Windows,需要解 ...

  3. YII2 用 in查询的时候出现无结果, 删除某些值后查询有结果 提前sort数组即可

    YII2 用 in查询的时候出现无结果, 删除某些值后查询有结果, 在数组前用了一个 array_merge 合并了2个数组. 排查发现是 数组中键值没有挨着从0开始 另外没有从小到大, 没观察室哪个 ...

  4. 解决:coursera 视频总是缓冲或者无法观看

    关于这个问题,网上有很多的答案,但是可能我是win10 最近才更新了的,网上的方法都不能完全解决,然后自己搜了哈,最后综合自己解决了.具体方法如下. 在开始菜单中打开运行命令,输入gpedit.msc ...

  5. 2.7python简历心得(重点)

    2019-2-7 20:07:20 绝地求生被盗了,...因为群邮件木马导致! 正好不要想买显卡啦!又省了好多钱!!! 努力多学技能!并且深入了解,精通自己技能!!!坚持学习!! 要学会拓展自己的技能 ...

  6. AJAX-快速上手(四个步骤)

    ## 1, ajax ajax是使用js进行在不重新加载页面的情况下,使得页面局部刷新.而传统的页面加载即需要,重新加载整个页面.它的加载是异步进行的,即在加载的同时,页面的其他部分可以正常使用,不会 ...

  7. 使用 JProbe 调试 Linux 内核(转)

    https://liam.page/2018/04/28/debug-in-Linux-kernel-jprobe/

  8. lamdba表达式

    lambda表达式是一个可传递的代码块,可以在以后执行一次或多次. lambda表达式的语法: 1. 参数 -> 表达式(无需指定返回类型) (String first, String seco ...

  9. netbeans10支持php7.1-7.3

    2019年1月16日10:56:49 官方发布时间2018年12月27日 PHP支持 NetBeans 10的所有PHP支持都是由我们的NetBeans提交者 Junichi Yamamoto提供的. ...

  10. [Java]直播方案----[接入环信聊天室]+[腾讯云直播]

    辛辛苦苦写的,转载请注明一下,这点信任我想还是有的吧,谢谢了. http://www.cnblogs.com/applerosa/p/7162268.html 之前做了直播,一直没时间写,好不容易闲下 ...