zoukankan      html  css  js  c++  java
  • xlsxwriter绘制散点图

    一、背景:

    为了统计服务器在不同并发请求数下响应的处理速度,对每一个请求的耗时进行了记录,后面将每个请求通过散点图表示出来,查看响应的分布状态。

    txt文档格式,读取到excel后的展示。

       

    二、流程解析

    1.读取文件函数

    使用f.readlines() 按行读取,最终返回一个列表,每行内容为一个列表中的元素。

    2.最小和最大函数

    因为excel中图表x轴需要一个浮点数,在excel中1:00:00 时间格式转换为数值为0.04147,所以首先取时间里面最小和最大的时间转换为浮点数为后面图表的范围做准备。

    3. 画图函数

    使用xlsxwriter只能创建,不能读取和修改文件。

    首先使用worksheet.write方法写入原始数据,再通过workbook.add_chart方法添加图表。

    三、xlsxwriter使用方法

     列宽度设置  worksheet.set_column('A:A', 20)

    单元格样式设置  

    bold=workbook.add_format({'bold':True})

    worksheet.write('A1',headings[0],bold)

    写数据方法(默认write写入为文本)

    worksheet.write('A1',headings[0],bold)
    worksheet.write_datetime(row,col,date_time,time_formats)
    worksheet.write_number(row,col+1,int(content_line[1]))
    图表系列设置
    chart.add_series({
    'name':['服务耗时统计',0,1],
    'categories':['服务耗时统计',1,0,row,0],
    'values':['服务耗时统计',1,1,row,1],
    'marker': {'type': 'circle',
    'size':2},
    })
    图表xy轴设置
    chart.set_x_axis({
    'name':'时间刻度',
    'min':f_min,
    'max':f_max,


    })
    chart.set_y_axis({
    'name':'响应时间(ms)',
    })

    四、代码

    import xlsxwriter
    import datetime
    # 数据读取
    def read_txt():
        content=[]
        with open('./cptn1','r') as f:
            content_line=f.readlines()
        for content_row in content_line:
            content.append(content_row.strip('
    ').split(','))
    
        return content
    def min_max(content):
        # min=content[0][0].split(' ')
        # max=content[-1][0].split(' ')
        min=content[0][0].split(':')
        max=content[-1][0].split(':')
        print(min,max)
        result_min=list(map(int,min))
        result_max=list(map(int,max))
        hour = 0.04167
        minute=0.0007
        f_min=round(result_min[0]*hour+minute*result_min[1]-0.0001,5)
        f_max=round(result_max[0]*hour+minute*result_max[1]+0.0005,5)
        print(f_min,f_max)
        return f_min,f_max
    def writetoexcel(f_min,f_max):
        content=read_txt()
        # print(content)
        workbook=xlsxwriter.Workbook('point_chart.xlsx')
        worksheet=workbook.add_worksheet('服务耗时统计')
        worksheet.set_column('A:A', 20)
    
        headings=['时间','总耗时','服务耗时']
        # 粗体形式
        bold=workbook.add_format({'bold':True})
        time_formats=workbook.add_format({'num_format':'hh:mm:ss'})
        # 首行标题添加
        worksheet.write('A1',headings[0],bold)
        worksheet.write('B1',headings[1],bold)
        worksheet.write('C1',headings[2],bold)
    
        # 内容
        col=0
        row=1
        for content_line in content:
            # 时间
            date_time=datetime.datetime.strptime(content_line[0],'%H:%M:%S')
    
            worksheet.write_datetime(row,col,date_time,time_formats)
            # 总耗时
            worksheet.write_number(row,col+1,int(content_line[1]))
            # 服务耗时
            worksheet.write_number(row,col+2,int(content_line[2]))
            row+=1
    
        # 图表添加
        chart=workbook.add_chart({'type':'scatter'})
        # straight_with_markers
        # straight
        # smooth_with_markers
        # smooth
        chart.set_size({'width':700,
                        'height':500})
        chart.add_series({
            'name':['服务耗时统计',0,1],
            'categories':['服务耗时统计',1,0,row,0],
            'values':['服务耗时统计',1,1,row,1],
            'marker': {'type': 'circle',
                       'size':2},
        })
        chart.add_series({
            'name': ['服务耗时统计', 0, 2],
            'categories':['服务耗时统计',1,0,row,0],
            'values':['服务耗时统计',1,2,row,2],
            'marker': {'type': 'circle',
                       'size':2},
        })
        chart.set_x_axis({
            'name':'时间刻度',
            'min':f_min,
            'max':f_max,
    
    
        })
        chart.set_y_axis({
            'name':'响应时间(ms)',
        })
        worksheet.insert_chart('F1',chart)
        workbook.close()
        print('done')
    if __name__=='__main__':
        content=read_txt()
        min,max=min_max(content)
        writetoexcel(min,max)

    最终效果图:

  • 相关阅读:
    烟花散尽漫说无(參考资料)
    [Leetcode]-Majority Element
    百度移动搜索測试电面
    可删除超炫&多种特效的Card视图(改造自cardsui-for-android开源项目),提供DEMO下载
    关闭 You need to use a Theme.AppCompat theme (or descendant) with this activity解决方法
    Android Snackbar使用方法及小技巧-design
    Android Intent Action 大全
    android权限大全
    Android 判断SD卡是否存在及容量查询
    Android中蓝牙的基本使用----BluetoothAdapter类简介
  • 原文地址:https://www.cnblogs.com/maoxianfei/p/11414057.html
Copyright © 2011-2022 走看看