将excel内存数据用Matplotlib画成图表,附python代码,首次使用matplotlib,经验总结(遇到的问题和解决办法)

本文档记录了使用Python的matplotlib库绘制内存使用趋势图的过程,包括从xls文件读取内存数据,转换数据格式,设置图表细节如调整x轴刻度、添加中文标签等,最终成功生成并保存图表图片。

背景:
有一份xls表格数据,里面有四列数据(分别是app内存,hal内存,server内存,时间戳),一共有上千行的数据类型,且所有数据都是str类型;
现需要画成一个内存走势图展示出来,最后保留照片。

---------------------------------------------------------------------------------------------------------------------------------
代码展示:
    def matplotlib_to_img(num):
        workbook = xlrd.open_workbook(r'D:\date.xls')
        work_sheet = workbook.sheet_by_name(u'sheet1')
        app_data = []
        hal_data = []
        server_data = []
        time_data = []
        for i in range(num):
            # 将内存数据从KB转换为MB
            hal_output_data = int(work_sheet.cell(i,0).value)/1024
            hal_data.append(hal_output_data)
            app_output_data = int(work_sheet.cell(i, 1).value)/1024
            app_data.append(app_output_data)
            server_output_data = int(work_sheet.cell(i, 2).value)/1024
            server_data.append(server_output_data)
            # 下面要将时间数据先从str转回float类型,再转换成int类型,然后转换成localtime
            time_local = time.localtime(int(float(work_sheet.cell(i, 3).value)))
            # 再将localtime转换成新的时间格式
            output_timedata = time.strftime("%H:%M:%S", time_local)
            time_data.append(output_timedata)
        plt.figure(figsize=(20, 10), dpi=80)  # 画布
        x = range(num)  # num为行数
        y = range(1200)  # 需求需要显示到1100M,所以y轴最大刻度值设为1200
        plt.title(u"内存")
        plt.ylabel(u"内存大小(单位/MB)")
        plt.xlabel(u"时间")
        hal_line = plt.plot(x, hal_data, color='blue',label='hal', linewidth=2.0)
        app_line = plt.plot(x, app_data, color='green',label='app', linewidth=2.0)
        server_line = plt.plot(x, server_data, color='orange',label='server', linewidth=2.0)
        plt.xticks(x[::10], time_data[::10], rotation=90)
        plt.yticks(y[::100], color='red')  # 修改x轴刻度为0~1000,间隔100,红色颜色
        plt.xlim(0,num) 
        plt.legend(loc='best')
        plt.grid()
        plt.savefig(r'D:\date.png')
        plt.show()
---------------------------------------------------------------------------------------------------------------------------------
经验总结(遇到的问题和解决办法):
1.问题:图表画出来了但是出现x轴最左边和最右边两部分覆盖不到,留着空白。

解决版本:

plt.xlim(0,num)  # 将数据从x起点为0的位置开始,解决matplotlib画图x轴最左边和最右边两部分覆盖不到的问题

2.问题:图表显示x轴浓密显示,时间点重叠在一起看不清楚。

解决办法:

plt.xticks(x[::10], time_data[::10], rotation=90)
# 修改x轴刻度为time_data内容,并将刻度旋转90度;
# 要同步修改x[::10]要和time_data[::10]对应间隔设置(间隔10,减少x轴浓密显示),不然时间会对不上,显示的时间跟数据的节点会出现错乱。

3.保留照片
plt.savefig(self.mem_img)  # 保存照片,注意下保存要在show之前
plt.show()

4.画图中文显示报错问题
问题:matplotlib图表添加中文报错ValueError: matplotlib display text must have all code points < 128 or use Unicode strings >
解决办法:在中文前面加上u,更改字符编码即可

---------------------------------------------------------------------------------------------------------------------------------

End:初次使用matplotlib实战,如有错误,请帮忙指出,谢谢~

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值