起因是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

# 我这里只给了表二的数据,只是打个样,聪明的你肯定会举一反三的。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐