在讲解绘制多个子图之前先简单了解一下使用matplotlib绘制一个图,导入绘图所需库matplotlib并创建一个等间隔的列表x,将[0,2*pi]等分为50等份,绘制函数sin(x)。当没有给定x轴数值时,默认以下标作为x的值,如果x值确定,则绘图时写为 plt.plot(x,y) 。

  如若想要绘制一个图时写入标签,则写为 plt.plot(x,y,label="figure1")。

from numpy import *
import matplotlib.pyplot as plt
x = linspace(0, 2 * pi, 50)
plt.plot(sin(x))
plt.xlabel('x-label')
plt.ylabel('y-label', fontsize='large')
plt.title('title')

以下先将整体代码插入,再分布讲解:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator, FormatStrFormatter def minmax_value(list1):
minvalue=min(list1)
maxvalue=max(list1)
return minvalue,maxvalue plt.figure(figsize=(16,14),dpi=98)
xmajorLocator = MultipleLocator(1) #将x主刻度标签设置为1的倍数 plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False p1 = plt.subplot(121)
p2 = plt.subplot(122) #图中展示点的数量
pointcount=5 x=[i for i in range(20)]
print(x) y1=[i**2 for i in range(20)]
y2=[i*4 for i in range(20)]
y3=[i*3+2 for i in range(20)]
y4=[i*4 for i in range(20)] for i in range(len(x)-1):
if i<pointcount:
minx,maxx=minmax_value(x[:pointcount])
minx,maxx=minmax_value(x[:pointcount])
minyA,maxyA=minmax_value(y1[:pointcount])
minyB,maxyB=minmax_value(y2[:pointcount]) maxy1=max(maxyA,maxyB)
miny1=min(minyA,minyB)
p1.axis([minx,maxx,miny1,maxy1])
p1.grid(True)
A,=p1.plot(x[:pointcount],y1[:pointcount],"g-")
B,=p1.plot(x[:pointcount],y2[:pointcount],"b-") #设置主刻度标签的位置,标签文本的格式
p1.xaxis.set_major_locator(xmajorLocator)
legend=p1.legend(handles=[A,B],labels=["图1","图2"]) minx,maxx=minmax_value(x[:pointcount])
minx,maxx=minmax_value(x[:pointcount])
minyA,maxyA=minmax_value(y3[:pointcount])
minyB,maxyB=minmax_value(y4[:pointcount]) maxy1=max(maxyA,maxyB)
miny1=min(minyA,minyB)
p2.axis([minx,maxx,miny1,maxy1])
p2.grid(True)
A,=p2.plot(x[:pointcount],y3[:pointcount],"r-")
B,=p2.plot(x[:pointcount],y4[:pointcount],"y-") #设置主刻度标签的位置,标签文本的格式
p2.xaxis.set_major_locator(xmajorLocator)
legend=p2.legend(handles=[A,B],labels=["图3","图4"])
elif i>=pointcount:
minx,maxx=minmax_value(x[i-pointcount:i])
minx,maxx=minmax_value(x[i-pointcount:i])
minyA,maxyA=minmax_value(y1[i-pointcount:i])
minyB,maxyB=minmax_value(y2[i-pointcount:i]) maxy1=max(maxyA,maxyB)
miny1=min(minyA,minyB)
p1.axis([minx,maxx,miny1,maxy1])
p1.grid(True)
A,=p1.plot(x[i-pointcount:i],y1[i-pointcount:i],"g-")
B,=p1.plot(x[i-pointcount:i],y2[i-pointcount:i],"b-") #设置主刻度标签的位置,标签文本的格式
p1.xaxis.set_major_locator(xmajorLocator)
legend=p1.legend(handles=[A,B],labels=["图1","图2"]) minx,maxx=minmax_value(x[i-pointcount:i])
minx,maxx=minmax_value(x[i-pointcount:i])
minyA,maxyA=minmax_value(y3[i-pointcount:i])
minyB,maxyB=minmax_value(y4[i-pointcount:i]) maxy1=max(maxyA,maxyB)
miny1=min(minyA,minyB)
p2.axis([minx,maxx,miny1,maxy1])
p2.grid(True)
A,=p2.plot(x[i-pointcount:i],y3[i-pointcount:i],"r-")
B,=p2.plot(x[i-pointcount:i],y4[i-pointcount:i],"y-") #设置主刻度标签的位置,标签文本的格式
p2.xaxis.set_major_locator(xmajorLocator)
legend=p2.legend(handles=[A,B],labels=["图3","图4"]) p1.set_xlabel("横轴属性名一",fontsize=14)
p1.set_ylabel("纵轴属性名一",fontsize=14)
p1.set_title("主题一",fontsize=18) p2.set_xlabel("横轴属性名二",fontsize=14)
p2.set_ylabel("纵轴属性名二",fontsize=14)
p2.set_title("主题二",fontsize=18) plt.pause(0.3)
plt.tight_layout(pad=4, w_pad=4.0, h_pad=3.0)

运行结果为:

1、导入库

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator, FormatStrFormatter

2、由于绘图过程中多次使用获取最大最小值,将获取最大最小值写入函数,后面直接调用函数即可。

def minmax_value(list1):
minvalue=min(list1)
maxvalue=max(list1)
return minvalue,maxvalue

3、(1)创建自定义图像,并设置figured的长和宽以及dpi参数指定绘图对象的分辨率;(2)设置x轴刻度的间隔;(3)对本次绘图中的字体进行设置;(4)在matplotlib下,一个figure对象可以包含多个子图(Axes),使用subplot()快速绘制。

plt.figure(figsize=(16,14),dpi=98)

xmajorLocator = MultipleLocator(1)
plt.rcParams['font.sans-serif']=['SimHei'] 
plt.rcParams['axes.unicode_minus'] = False
 
p1 = plt.subplot(121)
p2 = plt.subplot(122)

4、当数据量过多时,对数据一次性展示不能够达到对数据内部信息的解读。本例采用一次展示其中一部分数据,并动态的更新图片,于此同时,动态更新横纵坐标轴的取值范围。下面代码首先设置了每次展示点的数量,并获取了主题一中的所有数据值。根据x取值范围和值域y获取当前绘图过程中的横纵坐标取值范围,最后根据x,y的值进行绘图。

下面将先在一个子图上显示两条静态折现。当使用动态的折线图时,只需动态更新数据和横纵坐标的取值范围。总体代码中已经写出,下面不再赘述。

#图中展示点的数量
pointcount=5
x=[i for i in range(20)] y1=[i**2 for i in range(20)]
y2=[i*4 for i in range(20)] minx,maxx=minmax_value(x[:pointcount])
minyA,maxyA=minmax_value(y1[:pointcount])
minyB,maxyB=minmax_value(y2[:pointcount]) maxy1=max(maxyA,maxyB)
miny1=min(minyA,minyB)
p1.axis([minx,maxx,miny1,maxy1])
p1.grid(True)#绘图过程中出现的网格设置
A,=p1.plot(x[:pointcount],y1[:pointcount],"g-")
B,=p1.plot(x[:pointcount],y2[:pointcount],"b-") #设置主刻度标签的位置,标签文本的格式
p1.xaxis.set_major_locator(xmajorLocator)
legend=p1.legend(handles=[A,B],labels=["图1","图2"])  

结果如下所示:

5、设置边界,不设置边界经常会因为横纵轴的字体太大等其他原因导致横纵轴或者标题只能显示其中一部分。

plt.tight_layout(pad=4, w_pad=4.0, h_pad=3.0) 

如有问题,欢迎批评指正,谢谢。

python使用matplotlib在一个图形中绘制多个子图以及一个子图中绘制多条动态折线问题的更多相关文章

  1. SQL把表中的数据复制到另一个数据库中

    1 删除整张表的数据,并还原自增长值TRUNCATE TABLE TbWeixinActivity 2 3张表左连接select a.ID,c.Name,b.nickname,a.CreateDate ...

  2. SQL数据库中把一个表中的数据复制到另一个表中

    1.如果是整个表复制表达如下: insert into table1 select  * from table2 2.如果是有选择性的复制数据表达如下: insert into table1(colu ...

  3. sql将一个表中的数据插入到另一个表中

    sql将一个表中的数据插入到另一个表中 列名不一定要相同,只要你在HH中列出要插入列的列表跟select   from   mm表中的选择的列的列表一一对应就可以了,当然两边的数据类型应该是兼容的.  ...

  4. hivesql-一个表中的数据不在另一个表中

    如何最有效的判断 一个表中的数据不在另一个表中 两个方法一个是join 另一个是 exist 方法

  5. java中的文件读取和文件写出:如何从一个文件中获取内容以及如何向一个文件中写入内容

    import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.Fi ...

  6. sql 将一个表中的数据插入到另一个表中

    列名不一定要相同,只要你在HH中列出要插入列的列表跟select   from   mm表中的选择的列的列表一一对应就可以了,当然两边的数据类型应该是兼容的. 比如:insert   into   h ...

  7. sqlserver触发器如何将一个库中的数据插入到另外一个库中

    需求:实现的功能就是,查询当前表的所有信息,插入到另外一个库中(同一台机器,同一个SqlServer) 解决:insert into dB2.dbo.TB2 select * from db1.dbo ...

  8. sql一个表中的数据插入到另外一个表中

    声名:a,b ,都是表 复制代码代码如下: --b表存在(两表结构一样)  insert into b select * from a  若两表只是有部分(字段)相同,则 复制代码代码如下: inse ...

  9. SQL将一个数据库中的数据复制到另一个数据库中

    复制表结构 首先,打开并连接Sql Server,在源数据库Source_db(源数据库名称)上右键,然后依次点击"编写表脚本为"→"CREATE到"→&quo ...

随机推荐

  1. Nodejs中的模块系统

    一.模块化的定义 ①具有文件作用域 ②具有通信规则:加载和导出规则 二.CommonJS模块规范 1.nodejs中的模块系统,具有文件作用域,也具有通信规则,使用require方法加载模块,使用ex ...

  2. If...else 条件判断和If else嵌套

    If(条件表达式){ 如果条件表达式结果为true,执行该处代码. 如果条件表达式结果为false,执行下边代码. }else{ 如果条件表达式结果为false,执行该处代码. } If(条件表达式) ...

  3. 65、Spark Streaming:数据接收原理剖析与源码分析

    一.数据接收原理 二.源码分析 入口包org.apache.spark.streaming.receiver下ReceiverSupervisorImpl类的onStart()方法 ### overr ...

  4. 基于Linux(中标麒麟)上QT的环境搭建——解决cannot find lGL的问题

    接上一篇,QT在中标麒麟环境安装完成后遇到运行报错的问题 一.问题描述: 在中标麒麟上配置好QT的环境后,新建一个工程,不做其他的任何操作,直接运行都会报cannot find lGL的错误.如图所示 ...

  5. P5597 【XR-4】复读

    枚举终点u,把路径(1,u)压起来(不考虑u的子树),并起来之后暴力

  6. git常用命名:自用,持续更新

    1.切换分支 git checkout -b dev origin/feature/迭代1.1 2.提交本地代码到github git init //初始化git git config --globa ...

  7. springMVC开启声明式事务实现操作日志记录

    第一步.在applicationContext-mvc.xml开启AOP注解扫描 <aop:aspectj-autoproxy/> 第二步.创建增强类,实现日志记录 @Component ...

  8. CTF SSTI(服务器模板注入)

    目录 基础 一些姿势 1.config 2.self 3.[].() 3.url_for, g, request, namespace, lipsum, range, session, dict, g ...

  9. 搭建高可用rabbitmq集群及spring boot实现集群配置

    java spring boot配置: //具体参看了配置的源码 org.springframework.boot.autoconfigure.amqp.RabbitProperties //Rabb ...

  10. Python3基础 tuple 使用格式化字符串进行输出

             Python : 3.7.3          OS : Ubuntu 18.04.2 LTS         IDE : pycharm-community-2019.1.3    ...