您的位置:首页 > 编程语言 > PHP开发

matplotlib 散点图绘制

2014-08-31 22:46 507 查看

         最近SSD抖动测试需要绘制散点图,想用python来实现,通过google摸索,发现matplotlib模块很是强大,基本可以实现所以的图形绘制需求,这里做下matplotlib笔记记录。



  测试环境:

                    ubuntu 14.04 

                    安装: apt-get install python-matplotlib

  python版本:2.7

  问题需求: 

          fio  测试SSD随机/顺序 读/写 4个项目,每10S记录一次iops数据,每个项目5小时。 最后每个项目会有1800个数据。 需要将1800 * 4 个数据绘制在同一张图,直观的看出数值抖动性的变化!

以下就是实验效果(注时间问题,仅测试一个项目,其余项目数据为构造,仅测试图形绘制功能)



代码以及解释如下:

#!/usr/bin/env python
#coding:utf-8
#dec:ssd_iops_jitter draw
#pylt ver1

import matplotlib
matplotlib.use('Agg')   #不加有报错
import matplotlib.pyplot as plt

fig, ax = plt.subplots()

rr_file = 'random_read.jdata'
sr_file = 'seq_read.jdata'
rw_file = 'random_write.jdata'
sw_file = 'seq_write.jdata'

data_dt ={
'rr':['+g','random_read_4k',rr_file],	   #字典方式存储散点图标,颜色;图示名称;数据文件
'sr':['*b','seq_read_4k',sr_file],
'rw':['3r','random_write_64k',rw_file],
'sw':['2m','seq_write_64k',sw_file]
}

def get_file_data(filename):
with open(filename,'r') as f:
ct = f.read().split("\n")
return ct

def get_ssd_name():
with open('ssdname','r') as f:
name = f.read().strip()
return name

def get_ymax(l):  #获取y轴最大值
max_key = 0
for item in l:
if item > max_key:
max_key = item
ymax = max_key + 10000
return ymax

def get_ymin(l):  #获取y轴最小值
min_key = 1000000
for item in l:
if item < min_key:
min_key = item
if min_key - 10000:
ymin = min_key - 5000
else:
ymin = min_key
return ymin

def plot_setting():

s = [ 'rr', 'sr', 'rw', 'sw' ]
max_list = []
min_list = []
for key in s:
t = get_file_data(data_dt[key][2])
x = [ int(value.split()[0]) for value in t if value ]
y = [ int(value.split()[1]) for value in t if value ]
ax.plot(x, y, data_dt[key][0],label=data_dt[key][1])   #绘制散点,x,y分别会x,y轴数据列表;第3,4个位置参数分别为散点图标,label名称
max_list.append(max(y))
min_list.append(min(y))

y_max = get_ymax(max_list)
y_min = get_ymin(min_list)

#定义坐标轴与名称
plt.ylim(y_min,y_max)
plt.xlim(0,18000)
plt.ylabel("iops")
plt.xlabel("time(ms)")

#图示与字体设置
plt.rc('font', size=8)
plt.legend(loc=0, numpoints=1)
leg = plt.gca().get_legend()
ltext  = leg.get_texts()
plt.setp(ltext, fontsize='small')
#标题
ax.set_title(get_ssd_name())
plt.savefig('result/ssdTest.png')

if __name__ == '__main__':
plot_setting()


参考:

http://blog.csdn.net/kkxgx/article/details/6951959
http://sebug.net/paper/books/scipydoc/matplotlib_intro.html http://matplotlib.org/users/legend_guide.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: