博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python实战二:使用CSV数据绘制带数据标志的折线图(matplotlib)
阅读量:4088 次
发布时间:2019-05-25

本文共 1386 字,大约阅读时间需要 4 分钟。

背景:

自动获取缺陷管理系统中的bug趋势统计数据,并保存到CSV中,读取CSV数据并绘制带数据标志的折线图,并保存为png图片

下面代码仅实现“读取CSV数据并绘制带数据标志的折线图,并保存为png图片”的功能

 

#导入需要的模块

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab
import matplotlib.ticker as ticker
#读取CSV数据为numpy record array记录
r = mlab.csv2rec('D:/python/pj4/data/bug_trend.csv')
r.sort()
 #形成Y轴坐标数组
N = len(r)
ind = np.arange(N)  # the evenly spaced plot indices
#ind1这里是为了把图撑大一点
ind1 = np.arange(N+3)
#将X轴格式化为日期形式,X轴默认为0.5步进,
#这里将整数X轴坐标格式化为日期,.5的不对应日期,
#因为扩展了3格坐标,所以N+的坐标点也不显示日期
def format_date(x, pos=None):
    if not x%1 and  x<N:
        thisind = np.clip(int(x), 0, N-1)
        return r.create_date[thisind].strftime('%Y-%m-%d')
    else:
        return ''
 

#绘图

fig = plt.figure()
ax = fig.add_subplot(111)
#下行为了将图扩大一点,用白色线隐藏显示
ax.plot(ind1,ind1,'-',color='white')
#正常要显示的bug总数折线
ax.plot(ind, r['all'], 'o-',label='All of BUGs')
#正常要显示的bug已解决总数折线
ax.plot(ind, r['resolved'], 'o-',label='Resolved BUGs')
#正常要显示的bug已关闭总数折线
ax.plot(ind, r['closed'], 'o-',label='Closed BUGs')
#图标的标题
ax.set_title(u"BUG Trend Chart")
#线型示意说明
ax.legend(loc='upper left')

#在折线图上标记数据,-+0.1是为了错开一点显示数据

datadotxy=tuple(zip(ind-0.1,r['all']+0.1))
for dotxy in datadotxy:
    ax.annotate(str(int(dotxy[1]-0.1)),xy=dotxy)

#将X轴格式化为日期形式    

ax.xaxis.set_major_formatter(ticker.FuncFormatter(format_date))
fig.autofmt_xdate() 

#显示图片

plt.show()

#将图片保存到指定目录

plt.savefig("D:/python/pj4/img/bug_trend.png")
效果图:

这里写图片描述

 

CSV文件格式示意图:

你可能感兴趣的文章
(python版) Leetcode-66.加一
查看>>
(python版) Leetcode-287. 寻找重复数
查看>>
(python版) Leetcode-566. 重塑矩阵
查看>>
(python版) Leetcode-485. 最大连续1的个数
查看>>
(python版) Leetcode-189. 旋转数组
查看>>
四两拨千斤!深度主动学习综述2020
查看>>
了解DeepFakes背后的技术
查看>>
VSCode cv2 PyTorch 的红色波浪线【2020年解决方案】
查看>>
记【安装mmcv教程】 以及 遇到的Error
查看>>
深度解读AI从业者必备算法和工具 -- 公开课
查看>>
深度学习换脸发展调研-Deepfake
查看>>
《剑指Offer》JZ3:从尾到头打印链表
查看>>
《剑指Offer》JZ14:输出链表中倒数第k个结点
查看>>
《剑指Offer》JZ15:反转链表(双解法)
查看>>
《剑指Offer》JZ16:合并两个排序的链表(迭代法)
查看>>
(python版)《剑指Offer》JZ25:复杂链表的复制(详解)
查看>>
(python版)《剑指Offer》JZ36:两个链表的第一个公共结点
查看>>
(python版)《剑指Offer》JZ55:链表中环的入口结点
查看>>
(python版)《剑指Offer》JZ4:重建二叉树
查看>>
(python版)《剑指Offer》JZ17:树的子结构
查看>>