python

超轻量级php框架startmvc

python实现数据图表

更新时间:2020-05-05 04:06:01 作者:startmvc
平时压力测试,生成一些数据后分析,直接看log不是很直观,前段时间看到公司同事分享了

平时压力测试,生成一些数据后分析,直接看 log 不是很直观,前段时间看到公司同事分享了一个绘制图表python 模块 : plotly, 觉得很实用,利用周末时间熟悉下。

plotly

plotly 主页 : https://plot.ly/python/

安装

在 ubuntu 环境下,安装 plotly 很简单 python 版本2.7+


$ sudo pip install plotly

绘图

在 plotly 网站注册后,可以直接将生成的图片保存到网站上,便于共享保存。 这里使用离线的接口,生成的 html 保存在本地文件

绘制直线图

先随便搞一组数据用来绘制图表


lcd@ubuntu:~/$ cat gen_log.sh 
#!/bin/bash
count=$1
while [ $count -gt 0 ]
do
 sar -n DEV 1 1 | grep "Average:" | grep "eth0" | awk '{print $4,$5,$6}'
 count=$(($count-1))
done
lcd@ubuntu:~/$ sh gen_log.sh 1000 > log.txt

通过上述脚本,获取每秒钟网卡的3个数据,记录文本,利用 ploty 按时间绘制成直线图,实现如下:


#!/usr/bin/env python
import plotly.offline as pltoff
import plotly.graph_objs as go

def line_plots(name="line_plots.html"):
 dataset = {
 'time': [],
 'rx': [],
 'tx': [],
 'util': []
 }
 with open("./log.txt") as f:
 i = 0
 for line in f:
 items = line.split()
 dataset['time'].append(i)
 dataset['rx'].append(items[0])
 dataset['tx'].append(items[1])
 dataset['util'].append(items[2])
 i += 1
 
 data_g = []
 # 构建 time - rx 数据关系,折线图
 tr_rx = go.Scatter(
 x = dataset['time'],
 y = dataset['rx'],
 name = 'rx')
 data_g.append(tr_rx)

 tr_tx = go.Scatter(
 x = dataset['time'],
 y = dataset['tx'],
 name = 'tx')
 data_g.append(tr_tx)

 tr_util = go.Scatter(
 x = dataset['time'],
 y = dataset['util'],
 name = 'util')
 data_g.append(tr_util)

 # 设置图表布局
 layout = go.Layout(title="Line plots",
 xaxis={'title':'time'}, yaxis={'title':'value'})
 fig = go.Figure(data=data_g, layout=layout)
 # 生成离线html
 pltoff.plot(fig, filename=name)

if __name__=='__main__':
 line_plots()

生成图表如下所示 :

line_plot

柱形图


#!/usr/bin/env python
import plotly.offline as pltoff
import plotly.graph_objs as go

def bar_charts(name="bar_charts.html"):
 dataset = {'x':['man', 'woman'],
 'y1':[35, 26],
 'y2':[33, 30]}
 data_g = []
 tr_y1 = go.Bar(
 x = dataset['x'],
 y = dataset['y1'],
 name = '2016'

 )
 data_g.append(tr_y1)

 tr_y2 = go.Bar(
 x = dataset['x'],
 y = dataset['y2'],
 name = '2017'

 )
 data_g.append(tr_y2)
 layout = go.Layout(title="bar charts",
 xaxis={'title':'x'}, yaxis={'title':'value'})
 fig = go.Figure(data=data_g, layout=layout)
 pltoff.plot(fig, filename=name)

if __name__=='__main__':
 bar_charts()

bar char

饼状图


#!/usr/bin/env python
import plotly.offline as pltoff
import plotly.graph_objs as go

def pie_charts(name='pie_chart.html'):
 dataset = {
 'labels':['Windows', 'Linux', 'MacOS'],
 'values':[280, 10, 30]}
 data_g = []
 tr_p = go.Pie(
 labels = dataset['labels'],
 values = dataset['values']

 )
 data_g.append(tr_p)
 layout = go.Layout(title="pie charts")
 fig = go.Figure(data=data_g, layout=layout)
 pltoff.plot(fig, filename=name)

if __name__=='__main__':
 pie_charts()

python 数据图表 python plotly python绘制图表