在讲解绘制多个子图之前先简单了解一下使用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. 002——keil-Error: L6915E: Library reports error: __use_no_semihosting was requested解决

    ..\OBJ\KEY.axf: Error: L6915E: Library reports error: __use_no_semihosting was requested, but _ttywr ...

  2. BZOJ 4890: [Tjoi2017]城市 树形dp

    标签:树形dp,枚举,树的直径 一上来看到这个题就慌了,只想到了 $O(n^3)$ 的做法. 碰到这种题时要一步一步冷静地去分析,观察数据范围. 首先,$n\leqslant 5000$,所以可以先 ...

  3. Nodejs中的JavaScript

    一.Ecmascript ①基本语法:if var function Object Array等 ②特别注意:Node.js中没有DOM和BOM 二.核心模块: 1.Node.js为JavaScrip ...

  4. [RN] React Native 实现 类似QQ 登陆页面

    [RN] React Native 实现 类似QQ 登陆页面 一.主页index.js 项目目录下index.js /** * @format */ import {AppRegistry} from ...

  5. PHP 之Mysql优化

    一.建立索引 普通索引 index: 对关键字没有要求. 唯一索引 unique index: 要求关键字不能重复.同时增加唯一约束. 主键索引 primary key: 要求关键字不能重复,也不能为 ...

  6. [内网渗透]Cobaltstrike指令大全

    0x01 安装 Cobaltstrike是需要java环境才能运行的 linux下终端运行: sudo apt-get install openjdk-8-jdk windows下: 百度一堆配置JA ...

  7. IDEA中执行maven命令:mvn clean 时报错

    问题描述: 完成项目中的功能后,想要git一下,就用maven命令先清除一下编译文件,紧接着系统报错 Error executing Maven. 2 problems were encountere ...

  8. md5加密后不能解密

    MD5加密原理是散列算法,散列算法也称哈希算法.计算机专业学的数据结构就有哈希表这一知识点.比如10除以3余数为一,4除以3余数也为一,但余数为一的就不知道这个数是哪个了.所以md5不能解密.就算是设 ...

  9. SDN实验---Mininet的相关命令(待补充完善)

    一:补充 (一)推文 openvswitch的原理和常用命令 https://blog.csdn.net/ten_sory/article/details/79593554 (二)回顾:sudo mn ...

  10. 将map对象参数转换成String=String&方式

    * 将map对象参数转换成String=String&方式 * @param params * @param charset * @return * @throws UnsupportedEn ...