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 相关文章推荐
基于scrapy实现的简单蜘蛛采集程序
Apr 17 Python
Python创建模块及模块导入的方法
May 27 Python
Python中列表和元组的相关语句和方法讲解
Aug 20 Python
python模块之sys模块和序列化模块(实例讲解)
Sep 13 Python
python爬取各类文档方法归类汇总
Mar 22 Python
python更改已存在excel文件的方法
May 03 Python
解决Python 爬虫URL中存在中文或特殊符号无法请求的问题
May 11 Python
深入理解Django-Signals信号量
Feb 19 Python
基于PyQt4和PySide实现输入对话框效果
Feb 27 Python
python 轮询执行某函数的2种方式
May 03 Python
Python使用scapy模块发包收包
May 07 Python
Python爬虫中urllib3与urllib的区别是什么
Jul 21 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
理解PHP5中static和const关键字的区别
2007/03/19 PHP
PHP 5.5 创建和验证哈希最简单的方法详解
2013/11/07 PHP
PHP中SESSION的注销与清除
2015/04/16 PHP
php的优点总结 php有哪些优点
2019/07/19 PHP
javascript禁用键盘功能键让右击及其他键无效
2013/10/09 Javascript
用js将内容复制到剪贴板兼容浏览器
2014/03/18 Javascript
JavaScript中最简洁的编码html字符串的方法
2014/10/11 Javascript
跟我学习javascript的prototype原型和原型链
2015/11/18 Javascript
jquery文字填写自动高度的实现方法
2016/11/07 Javascript
react实现pure render时bind(this)隐患需注意!
2017/03/09 Javascript
angularjs封装$http为factory的方法
2017/05/18 Javascript
vue中当图片地址无效的时候,显示默认图片的方法
2018/09/18 Javascript
vue实现分环境打包步骤(给不同的环境配置相对应的打包命令)
2019/06/04 Javascript
vue自定义正在加载动画的例子
2019/11/14 Javascript
Python 文件操作实现代码
2009/10/07 Python
python对数组进行反转的方法
2015/05/20 Python
Python基于ThreadingTCPServer创建多线程代理的方法示例
2018/01/11 Python
python中正则表达式的使用方法
2018/02/25 Python
解决python写入mysql中datetime类型遇到的问题
2018/06/21 Python
Selenium控制浏览器常见操作示例
2018/08/13 Python
详解python使用turtle库来画一朵花
2019/03/21 Python
利用python开发app实战的方法
2019/07/09 Python
Python企业编码生成系统之系统主要函数设计详解
2019/07/26 Python
python实现两个文件夹的同步
2019/08/29 Python
利用Python脚本实现自动刷网课
2020/02/03 Python
Python操作Excel工作簿的示例代码(\*.xlsx)
2020/03/23 Python
Pycharm中安装wordcloud等库失败问题及终端通过pip安装的Python库如何添加到Pycharm解释器中(推荐)
2020/05/10 Python
自我评价是什么
2014/01/04 职场文书
关于廉洁的广播稿
2014/01/30 职场文书
教师个人剖析材料
2014/02/05 职场文书
读书活动实施方案
2014/03/10 职场文书
工程项目经理任命书
2014/06/05 职场文书
2015年党员自我剖析材料
2014/12/17 职场文书
城管年度个人总结
2015/02/28 职场文书
合同范本之电脑出租
2019/08/13 职场文书
Nginx下SSL证书安装部署步骤介绍
2021/12/06 Servers