Python使用plotly绘制数据图表的方法


Posted in Python onJuly 18, 2017

导语:使用 python-plotly 模块来进行压测数据的绘制,并且生成静态 html 页面结果展示。

不少小伙伴在开发过程中都有对模块进行压测的经历,压测结束后大家往往喜欢使用Excel处理压测数据并绘制数据可视化视图,但这样不能很方便的使用web页面进行数据展示。本文将介绍使用python-plotly模块来进行压测数据的绘制,并且生成静态html页面方便结果展示。

Plotly简介

Plotly是一款使用JavaScript开发的制图工具,提供了与主流数据分析语言交互的API(如:Python, R, MATLAB)。大家可以到官网 https://plot.ly/ 了解更多详细的信息。Plotly能够绘制具有用户交互功能的精美图表。

Python使用plotly绘制数据图表的方法

Python-Plotly 安装

本文档主要是介绍使用plotly的Python API来进行几种简单图表的绘制,更多Plotly的用法请参考 https://plot.ly/python/

Python-Plotly可以使用pip安装,并且最好在Python2.7版本及以上安装使用,如果使用Python2.6版本,请自行安装Python2.7和对应的pip。

Plotly绘图实例

line-plots

绘图效果:

生成的html页面在右上角提供了丰富的交互工具。

Python使用plotly绘制数据图表的方法

代码:

def line_plots(name):
  '''
  绘制普通线图
  '''
  #数据,x为横坐标,y,z为纵坐标的两项指标,三个array长度相同
  dataset = {'x':[0,1,2,3,4,5,6,7,8,9],
        'y':[5,4,1,3,11,2,6,7,19,20],
        'z':[12,9,0,0,3,25,8,17,22,5]}
  data_g = []
  #分别插入 y, z
  tr_x = Scatter(
    x = dataset['x'],
    y = dataset['y'],
    name = 'y' 
  )
  data_g.append(tr_x)
  tr_z = Scatter(
    x = dataset['x'],
    y = dataset['z'],
    name = 'z' 
  )
  data_g.append(tr_z)
  #设置layout,指定图表title,x轴和y轴名称
  layout = Layout(title="line plots", xaxis={'title':'x'}, yaxis={'title':'value'})
  #将layout设置到图表
  fig = Figure(data=data_g, layout=layout)
  #绘图,输出路径为name参数指定
  pltoff.plot(fig, filename=name)

scatter-plots

绘图效果:

Python使用plotly绘制数据图表的方法

代码:

def scatter_plots(name):
  '''
  绘制散点图
  '''
  dataset = {'x':[0,1,2,3,4,5,6,7,8,9],
        'y':[5,4,1,3,11,2,6,7,19,20],
        'text':['5_txt','4_txt','1_txt','3_txt','11_txt','2_txt','6_txt','7_txt','19_txt','20_txt']}

  data_g = []

  tr_x = Scatter(
    x = dataset['x'],
    y = dataset['y'],
    text = dataset['text'],
    textposition='top center',
    mode='markers+text',
    name = 'y' 
  )
  data_g.append(tr_x)

  layout = Layout(title="scatter plots", xaxis={'title':'x'}, yaxis={'title':'value'})
  fig = Figure(data=data_g, layout=layout)
  pltoff.plot(fig, filename=name)

bar-charts

绘图效果:

Python使用plotly绘制数据图表的方法

代码:

def bar_charts(name):
  '''
  绘制柱状图
  '''
  dataset = {'x':['Windows', 'Linux', 'Unix', 'MacOS'],
        'y1':[45, 26, 37, 13],
        'y2':[19, 27, 33, 21]}
  data_g = []
  tr_y1 = Bar(
    x = dataset['x'],
    y = dataset['y1'],
    name = 'v1'
  )
  data_g.append(tr_y1)

  tr_y2 = Bar(
    x = dataset['x'],
    y = dataset['y2'],
    name = 'v2'
  )
  data_g.append(tr_y2)
  layout = Layout(title="bar charts", xaxis={'title':'x'}, yaxis={'title':'value'})
  fig = Figure(data=data_g, layout=layout)
  pltoff.plot(fig, filename=name)

pie-charts

绘图效果:

Python使用plotly绘制数据图表的方法

代码:

def pie_charts(name):
  '''
  绘制饼图
  '''
  dataset = {'labels':['Windows', 'Linux', 'Unix', 'MacOS', 'Android', 'iOS'],
        'values':[280, 25, 10, 100, 250, 270]} 
  data_g = []
  tr_p = Pie(
    labels = dataset['labels'],
    values = dataset['values']
  )
  data_g.append(tr_p)
  layout = Layout(title="pie charts")
  fig = Figure(data=data_g, layout=layout)
  pltoff.plot(fig, filename=name)

filled-area-plots

本例是绘制具有填充效果的堆叠线图,适合分析具有堆叠百分比属性的数据

绘图效果:

Python使用plotly绘制数据图表的方法

代码:

def filled_area_plots(name):
  '''
  绘制堆叠填充的线图
  '''
  dataset = {'x':[0,1,2,3,4,5,6,7,8,9],
        'y1':[5,4,1,3,11,2,6,7,19,20],
        'y2':[12,9,0,0,3,25,8,17,22,5],
        'y3':[13,22,46,1,15,4,18,11,17,20]}

  #计算y1,y2,y3的堆叠占比
  dataset['y1_stack'] = dataset['y1']
  dataset['y2_stack'] = [y1+y2 for y1, y2 in zip(dataset['y1'], dataset['y2'])]
  dataset['y3_stack'] = [y1+y2+y3 for y1, y2, y3 in zip(dataset['y1'], dataset['y2'], dataset['y3'])]

  dataset['y1_text'] = ['%s(%s%%)'%(y1, y1*100/y3_s) for y1, y3_s in zip(dataset['y1'], dataset['y3_stack'])]
  dataset['y2_text'] = ['%s(%s%%)'%(y2, y2*100/y3_s) for y2, y3_s in zip(dataset['y2'], dataset['y3_stack'])]
  dataset['y3_text'] = ['%s(%s%%)'%(y3, y3*100/y3_s) for y3, y3_s in zip(dataset['y3'], dataset['y3_stack'])]

  data_g = []
  tr_1 = Scatter(
    x = dataset['x'],
    y = dataset['y1_stack'],
    text = dataset['y1_text'],
    hoverinfo = 'x+text',
    mode = 'lines',
    name = 'y1', 
    fill = 'tozeroy' #填充方式: 到x轴
  )
  data_g.append(tr_1)

  tr_2 = Scatter(
    x = dataset['x'],
    y = dataset['y2_stack'],
    text = dataset['y2_text'],
    hoverinfo = 'x+text',
    mode = 'lines',
    name = 'y2', 
    fill = 'tonexty' #填充方式:到下方的另一条线
  )
  data_g.append(tr_2)

  tr_3 = Scatter(
    x = dataset['x'],
    y = dataset['y3_stack'],
    text = dataset['y3_text'],
    hoverinfo = 'x+text',
    mode = 'lines',
    name = 'y3',
    fill = 'tonexty'
  )
  data_g.append(tr_3)

  layout = Layout(title="field area plots", xaxis={'title':'x'}, yaxis={'title':'value'})
  fig = Figure(data=data_g, layout=layout)
  pltoff.plot(fig, filename=name)

小结

本文介绍了利用python-plotly绘制数据图的方法,实例中 线图(line plots)、散点图(scatter plots)、柱状图(bar charts)、饼图(pie charts)以及填充堆叠线图(filled area plots)这五种典型的图表基本上涵盖了大部分类型的测试数据,各位小伙伴可以加以变形绘制出更多的漂亮图标。

文中所示代码:test_plotly_3water.rar

参考资料

1. https://plot.ly/python/basic-charts/

2. https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python 列表list使用介绍
Nov 30 Python
python中的__slots__使用示例
Feb 26 Python
编写Python脚本批量下载DesktopNexus壁纸的教程
May 06 Python
Python遍历指定文件及文件夹的方法
May 09 Python
使用Django启动命令行及执行脚本的方法
May 29 Python
基于python log取对数详解
Jun 08 Python
Python基础学习之函数方法实例详解
Jun 18 Python
Python 使用 prettytable 库打印表格美化输出功能
Dec 26 Python
Tensorflow 实现分批量读取数据
Jan 04 Python
python模拟点击网页按钮实现方法
Feb 25 Python
python中rb含义理解
Jun 18 Python
python3实现无权最短路径的方法
May 12 Python
python中日志logging模块的性能及多进程详解
Jul 18 #Python
浅谈python中的__init__、__new__和__call__方法
Jul 18 #Python
Pycharm编辑器技巧之自动导入模块详解
Jul 18 #Python
python对DICOM图像的读取方法详解
Jul 17 #Python
Python实现excel转sqlite的方法
Jul 17 #Python
PyChar学习教程之自定义文件与代码模板详解
Jul 17 #Python
Python实现将sqlite数据库导出转成Excel(xls)表的方法
Jul 17 #Python
You might like
extjs render 用法介绍
2013/09/11 Javascript
用js来获取上传的文件名纯粹是为了美化而用
2013/10/23 Javascript
JavaScript面对国际化编程时的一些建议
2015/06/24 Javascript
AngularJs定制样式插入到ueditor中的问题小结
2016/08/01 Javascript
前端面试题及答案整理(二)
2016/08/26 Javascript
Boostrap实现的登录界面实例代码
2016/10/09 Javascript
利用CSS、JavaScript及Ajax实现图片预加载的三大方法
2017/01/22 Javascript
详解如何使用vue-cli脚手架搭建Vue.js项目
2017/05/19 Javascript
jQuery DOM节点的遍历方法小结
2017/08/15 jQuery
Vue自定义指令封装节流函数的方法示例
2018/07/09 Javascript
从0到1搭建element后台框架优化篇(打包优化)
2019/05/12 Javascript
jQuery 常用特效实例小结【显示与隐藏、淡入淡出、滑动、动画等】
2020/05/19 jQuery
js属性对象的hasOwnProperty方法的使用
2021/02/05 Javascript
[00:27]DOTA2战队VP、Secret贺新春
2018/02/11 DOTA
wxpython学习笔记(推荐查看)
2014/06/09 Python
Python引用传值概念与用法实例小结
2017/10/07 Python
Python语言描述KNN算法与Kd树
2017/12/13 Python
详解appium+python 启动一个app步骤
2017/12/20 Python
Python PIL读取的图像发生自动旋转的实现方法
2019/07/05 Python
python动态视频下载器的实现方法
2019/09/16 Python
Python爬虫爬取百度搜索内容代码实例
2020/06/05 Python
HTML5在手机端实现视频全屏展示方法
2020/11/23 HTML / CSS
印度尼西亚在线时尚购物网站:ZALORA印尼
2016/08/02 全球购物
超30万乐谱下载:Musicnotes.com
2016/09/24 全球购物
Geekbuying波兰:购买中国电子产品
2019/10/20 全球购物
英国Lookfantastic中文网站:护肤品美妆美发购物(英国直邮)
2020/04/27 全球购物
法律专业个人实习自我鉴定
2013/09/23 职场文书
初中生操行评语大全
2014/04/24 职场文书
期中考试反思800字
2014/05/01 职场文书
小学教师师德师风个人整改措施
2014/09/18 职场文书
优秀教育工作者事迹材料
2014/12/24 职场文书
小学二年级数学教学计划
2015/01/20 职场文书
幼儿园大班个人总结
2015/02/28 职场文书
个人培训总结
2015/03/05 职场文书
什么是动态刷新率DRR? Windows11动态刷新率功能介绍
2021/11/21 数码科技
Python Pandas解析读写 CSV 文件
2022/04/11 Python