起因是app性能测试工具perfdog收费了,所以想自己写一个实时折线图,用来显示adb获取到的app等内存信息,网上查了较多资料,都讲的很复杂,或者就是先得到大量数据,最后只展现一次的形式。
然后就自己看官方文档,想办法试试用循环能不能搞定,结果成了。
效果如下图
# 当前选用matplotlib版本3.3.2
import matplotlib.pyplot as plt
import random
# 创建一个折线图
fig = plt.figure()
# 设置中文语言
plt.rcParams['font.sans-serif'] = ['SimHei'] # 显示中文标签
plt.rcParams['axes.unicode_minus'] = False
# 创建四个表格,411代表创建4行1列,当前在1的位置
ax = fig.add_subplot(4, 1, 1)
bx = fig.add_subplot(4, 1, 2)
cx = fig.add_subplot(4, 1, 3)
dx = fig.add_subplot(4, 1, 4)
# 给表的Y轴位置加上标签,rotation代表让文字横着展示,labelpad代表文字距表格多远了
ax.set_ylabel('表一', rotation=0, fontsize=16, labelpad=20)
bx.set_ylabel('表二', rotation=0, fontsize=16, labelpad=20)
# 给定一个参数,用来标识是不是第一次创建
line = None
# 给定一个X轴和Y轴的参数列表,用作后面承载数据
obsX = []
obsY = []
# 再给定一个X轴的开始位置,用作后面累加
i = 1
while True:
# 往列表插入展示的点的坐标
obsX.append(i)
# Y轴的话,由于没有实际数据,这里就用随机数代替
obsY.append(random.randrange(100, 200))
# 如果图还没有画,则创建一个画图
if line is None:
# -代表用横线画,g代表线的颜色是绿色,.代表,画图的关键点,用点代替。也可以用*,代表关键点为五角星
line = bx.plot(obsX, obsY, '-g', marker='.')[0]
# 这里插入需要画图的参数,由于图线,是由很多个点组成的,所以这里需要的是一个列表
line.set_xdata(obsX)
line.set_ydata(obsY)
# 我这里设计了一种方法,当X轴跑了100次的时候,则让X坐标的原点动起来
if len(obsX) < 100:
bx.set_xlim([min(obsX), max(obsX) + 30])
else:
bx.set_xlim([obsX[-80], max(obsX) * 1.2])
# Y轴的话我就没让他动了,然后加一个10,防止最高的订单顶到天花板
bx.set_ylim([min(obsY), max(obsY) + 10])
# 这个就是表的刷新时间了,以秒为单位
plt.pause(1)
# 画完一次了,i的数据加1,让X轴可以一直往前走。
i += 1
# 我这里只给了表二的数据,只是打个样,聪明的你肯定会举一反三的。