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 相关文章推荐
pycharm 使用心得(二)设置字体大小
Jun 05 Python
深入理解Python装饰器
Jul 27 Python
详解python里使用正则表达式的全匹配功能
Oct 19 Python
Python高级用法总结
May 26 Python
查找python项目依赖并生成requirements.txt的方法
Jul 10 Python
在matplotlib的图中设置中文标签的方法
Dec 13 Python
PyQt4实时显示文本内容GUI的示例
Jun 14 Python
Python2.7版os.path.isdir中文路径返回false的解决方法
Jun 21 Python
关于PyTorch 自动求导机制详解
Aug 18 Python
Python Opencv轮廓常用操作代码实例解析
Sep 01 Python
python 开心网和豆瓣日记爬取的小爬虫
May 29 Python
Python使用socket去实现TCP客户端和TCP服务端
Apr 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
重置版战役片段
2020/04/09 魔兽争霸
更改localhost为其他名字的方法
2014/02/10 PHP
phpmyadmin提示The mbstring extension is missing的解决方法
2014/12/17 PHP
PHP实现的杨辉三角求解算法分析
2019/03/11 PHP
“不能执行已释放的Script代码”错误的原因及解决办法
2007/09/09 Javascript
使用jQuery简化Ajax开发 Ajax开发入门
2009/10/14 Javascript
层序遍历在ExtJs的TreePanel中的应用
2009/10/16 Javascript
Js冒泡事件详解及阻止示例
2014/03/21 Javascript
动态创建script在IE中缓存js文件时导致编码的解决方法
2014/05/04 Javascript
JavaScript Promise启示录
2014/08/12 Javascript
js实现点击图片改变页面背景图的方法
2015/02/28 Javascript
jquery实现简单的二级导航下拉菜单效果
2015/09/07 Javascript
js实现页面跳转的几种方法小结
2016/05/16 Javascript
利用浮层使select不可选的实现方法
2016/12/03 Javascript
详解vue父子模版嵌套案例
2017/03/04 Javascript
详解vue-router传参的两种方式
2018/09/10 Javascript
Angular6 发送手机验证码按钮倒计时效果实现方法
2019/01/08 Javascript
jQuery添加新内容的四个常用方法分析【append,prepend,after,before】
2019/03/19 jQuery
详解基于mpvue微信小程序下载远程图片到本地解决思路
2019/05/16 Javascript
通过实例解析vuejs如何实现调试代码
2020/07/16 Javascript
使用Python的Tornado框架实现一个简单的WebQQ机器人
2015/04/24 Python
独特的python循环语句
2016/11/20 Python
go和python变量赋值遇到的一个问题
2017/08/31 Python
启动Atom并运行python文件的步骤
2018/11/09 Python
Python单元测试unittest的具体使用示例
2018/12/17 Python
Django框架模板的使用方法示例
2019/05/25 Python
python中列表的切片与修改知识点总结
2019/07/23 Python
python计算auc的方法
2020/09/09 Python
Python 实现国产SM3加密算法的示例代码
2020/09/21 Python
超市营业员求职简历的自我评价
2013/10/17 职场文书
大学生咖啡店创业计划书
2014/01/21 职场文书
交通事故委托书范本(2篇)
2014/09/21 职场文书
2014年秘书工作总结
2014/11/25 职场文书
实习介绍信模板
2015/01/30 职场文书
2015年共青团工作总结
2015/05/15 职场文书
2015暑期工社会实践报告
2015/07/13 职场文书