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定时器使用示例分享
Feb 16 Python
python中合并两个文本文件并按照姓名首字母排序的例子
Apr 25 Python
用Python的pandas框架操作Excel文件中的数据教程
Mar 31 Python
python 读写txt文件 json文件的实现方法
Oct 22 Python
Python2随机数列生成器简单实例
Sep 04 Python
python实现简单遗传算法
Mar 19 Python
python使用递归的方式建立二叉树
Jul 03 Python
Django在admin后台集成TinyMCE富文本编辑器的例子
Aug 09 Python
python遍历文件目录、批量处理同类文件
Aug 31 Python
Python笔记之观察者模式
Nov 20 Python
python装饰器的特性原理详解
Dec 25 Python
Python 3.8 新功能来一波(大部分人都不知道)
Mar 11 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
php绘图之生成饼状图的方法
2015/01/24 PHP
PHP中PDO事务处理操作示例
2018/05/02 PHP
Javascript中的常见排序算法
2007/03/27 Javascript
解决3.01版的jquery.form.js中文乱码问题的解决方法
2012/03/08 Javascript
JavaScript通过RegExp实现客户端验证处理程序
2013/05/07 Javascript
返回页面顶部top按钮通过锚点实现(自写)
2013/08/30 Javascript
javascript自动给文本url地址增加链接的方法分享
2014/01/20 Javascript
JavaScript中的逻辑判断符&&、||与!介绍
2014/12/31 Javascript
浅谈node.js中async异步编程
2015/10/22 Javascript
浅析Node.js 中 Stream API 的使用
2015/10/23 Javascript
JavaScript动态创建form表单并提交的实现方法
2015/12/10 Javascript
jQuery form 表单验证插件(fieldValue)校验表单
2016/01/24 Javascript
Node.js编写爬虫的基本思路及抓取百度图片的实例分享
2016/03/12 Javascript
SWFUpload多文件上传及文件个数限制的方法
2016/05/31 Javascript
AngularJS模块详解及示例代码
2016/08/17 Javascript
jquery把int类型转换成字符串类型的方法
2016/10/07 Javascript
JS定时器用法分析【时钟与菜单中的应用】
2016/12/21 Javascript
详解node+express+ejs+bootstrap构建项目
2017/09/27 Javascript
JavaScript中立即执行函数实例详解
2017/11/04 Javascript
去掉vue 中的代码规范检测两种方法(Eslint验证)
2018/03/21 Javascript
Vue仿支付宝支付功能
2018/05/25 Javascript
vue Treeselect下拉树只能选择第N级元素实现代码
2020/08/31 Javascript
微信小程序实现分页加载效果
2020/11/19 Javascript
用webAPI实现图片放大镜效果
2020/11/23 Javascript
[01:22:19]EG vs TNC Supermajor小组赛B组败者组第一轮 BO3 第二场 6.2
2018/06/03 DOTA
在python带权重的列表中随机取值的方法
2019/01/23 Python
Python面向对象实现一个对象调用另一个对象操作示例
2019/04/08 Python
解决django xadmin主题不显示和只显示bootstrap2的问题
2020/03/30 Python
Python捕获异常堆栈信息的几种方法(小结)
2020/05/18 Python
python里的单引号和双引号的有什么作用
2020/06/17 Python
利用Python实现朋友圈中的九宫格图片效果
2020/09/03 Python
加拿大最大的体育用品、鞋类和服装零售商:Sport Chek
2018/11/29 全球购物
小学音乐教学反思
2014/02/05 职场文书
个人德育工作总结
2015/03/05 职场文书
文艺部部长竞选稿
2015/11/21 职场文书
CSS 伪元素::marker详解
2021/06/26 HTML / CSS