1. 程式人生 > >Python使用plotly繪制數據圖表的方法

Python使用plotly繪制數據圖表的方法

類型 blank spa 設置 mar ase rap bsp pen

轉載:http://www.jb51.net/article/118936.htm

本篇文章主要介紹了Python使用plotly繪制數據圖表的方法,實例分析了plotly繪制的技巧。

導語:使用 python-plotly 模塊來進行壓測數據的繪制,並且生成靜態 html 頁面結果展示。

不少小夥伴在開發過程中都有對模塊進行壓測的經歷,壓測結束後大家往往喜歡使用Excel處理壓測數據並繪制數據可視化視圖,但這樣不能很方便的使用web頁面進行數據展示。本文將介紹使用python-plotly模塊來進行壓測數據的繪制,並且生成靜態html頁面方便結果展示。

Plotly繪圖實例:

1、line-plots

繪圖效果:

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

技術分享圖片

代碼:

 1 import plotly.plotly
 2 import plotly.graph_objs as pg
 3 
 4 
 5 def line_plots(output_path):
 6     """
 7     繪制普通線圖
 8     """
 9     # 數據,x為橫坐標,y,z為縱坐標的兩項指標,三個array長度相同
10     dataset = {x: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
11                y: [5, 4, 1,3, 11, 2, 6, 7, 19, 20],
12 z: [12, 9, 0, 0, 3, 25, 8, 17, 22, 5]} 13 14 data_g = [] 15 # 分別插入 y, z 16 tr_x = pg.Scatter( 17 x=dataset[x], 18 y=dataset[y], 19 name=y 20 ) 21 data_g.append(tr_x) 22 tr_z = pg.Scatter( 23 x=dataset[x], 24 y=dataset[
z], 25 name=z 26 ) 27 data_g.append(tr_z) 28 29 # 設置layout,指定圖表title,x軸和y軸名稱 30 layout = pg.Layout(title="line plots", xaxis={title: x}, yaxis={title: value}) 31 # 將layout設置到圖表 32 fig = pg.Figure(data=data_g, layout=layout) 33 # 繪圖,輸出路徑為output_path參數指定 34 plotly.offline.plot(fig, filename=output_path) 35 36 37 if __name__ == __main__: 38 line_plots(output_path)

2、scatter-plots

繪圖效果:

技術分享圖片

 1 import plotly.plotly
 2 import plotly.graph_objs as pg
 3 
 4 
 5 def scatter_plots(output_path):
 6   ‘‘‘
 7   繪制散點圖
 8   ‘‘‘
 9   dataset = {x:[0,1,2,3,4,5,6,7,8,9],
10         y:[5,4,1,3,11,2,6,7,19,20],
11         text:[5_txt,4_txt,1_txt,3_txt,11_txt,2_txt,6_txt,7_txt,19_txt,20_txt]}
12 
13   data_g = []
14 
15   tr_x = pg.Scatter(
16     x = dataset[x],
17     y = dataset[y],
18     text = dataset[text],
19     textposition=top center,
20     mode=markers+text,
21     name = y
22   )
23   data_g.append(tr_x)
24 
25   layout = pg.Layout(title="scatter plots", xaxis={title:x}, yaxis={title:value})
26   fig = pg.Figure(data=data_g, layout=layout)
27   plotly.offline.plot(fig, filename=output_path)
28 
29 
30 if __name__ == __main__:
31     scatter_plots("C:/Users/fuqia/Desktop/scatter.html")

3、bar-charts

繪圖效果:

技術分享圖片

代碼:

 1 import plotly.plotly
 2 import plotly.graph_objs as pg
 3 
 4 
 5 def bar_charts(name):
 6     ‘‘‘
 7     繪制柱狀圖
 8     ‘‘‘
 9     dataset = {x:[Windows, Linux, Unix, MacOS],
10         y1:[45, 26, 37, 13],
11         y2:[19, 27, 33, 21]}
12     data_g = []
13     tr_y1 = pg.Bar(
14         x = dataset[x],
15         y = dataset[y1],
16         name = v1
17     )
18     data_g.append(tr_y1)
19 
20     tr_y2 = pg.Bar(
21         x = dataset[x],
22         y = dataset[y2],
23         name = v2
24     )
25     data_g.append(tr_y2)
26     layout = pg.Layout(title="bar charts", xaxis={title:x}, yaxis={title:value})
27     fig = pg.Figure(data=data_g, layout=layout)
28     plotly.offline.plot(fig, filename=name)
29 
30 
31 if __name__ == __main__:
32     bar_charts("C:/Users/fuqia/Desktop/bar.html")

4、pie-charts

繪圖效果:

技術分享圖片

代碼:

 1 import plotly.plotly
 2 import plotly.graph_objs as pg
 3 
 4 
 5 def pie_charts(name):
 6     ‘‘‘
 7     繪制餅圖
 8     ‘‘‘
 9     dataset = {labels: [Windows, Linux, Unix, MacOS, Android, iOS],
10                values: [280, 25, 10, 100, 250, 270]}
11     data_g = []
12     tr_p = pg.Pie(
13         labels = dataset[labels],
14         values = dataset[values]
15     )
16     data_g.append(tr_p)
17     layout = pg.Layout(title="pie charts")
18     fig = pg.Figure(data=data_g, layout=layout)
19     plotly.offline.plot(fig, filename=name)
20 
21 
22 if __name__ == __main__:
23     pie_charts("C:/Users/fuqia/Desktop/bar.html")

5、filled-area-plots

本例是繪制具有填充效果的堆疊線圖,適合分析具有堆疊百分比屬性的數據

繪圖效果:

技術分享圖片

代碼:

 1 import plotly.plotly
 2 import plotly.graph_objs as pg
 3 
 4 
 5 def filled_area_plots(name):
 6     ‘‘‘
 7     繪制堆疊填充的線圖
 8     ‘‘‘
 9     dataset = {x:[0,1,2,3,4,5,6,7,8,9],
10           y1:[5,4,1,3,11,2,6,7,19,20],
11           y2:[12,9,0,0,3,25,8,17,22,5],
12           y3:[13,22,46,1,15,4,18,11,17,20]}
13 
14     #計算y1,y2,y3的堆疊占比
15     dataset[y1_stack] = dataset[y1]
16     dataset[y2_stack] = [y1+y2 for y1, y2 in zip(dataset[y1], dataset[y2])]
17     dataset[y3_stack] = [y1+y2+y3 for y1, y2, y3 in zip(dataset[y1], dataset[y2], dataset[y3])]
18 
19     dataset[y1_text] = [%s(%s%%)%(y1, y1*100/y3_s) for y1, y3_s in zip(dataset[y1], dataset[y3_stack])]
20     dataset[y2_text] = [%s(%s%%)%(y2, y2*100/y3_s) for y2, y3_s in zip(dataset[y2], dataset[y3_stack])]
21     dataset[y3_text] = [%s(%s%%)%(y3, y3*100/y3_s) for y3, y3_s in zip(dataset[y3], dataset[y3_stack])]
22 
23     data_g = []
24     tr_1 = pg.Scatter(
25       x = dataset[x],
26       y = dataset[y1_stack],
27       text = dataset[y1_text],
28       hoverinfo = x+text,
29       mode = lines,
30       name = y1,
31       fill = tozeroy #填充方式: 到x軸
32     )
33     data_g.append(tr_1)
34 
35     tr_2 = pg.Scatter(
36       x = dataset[x],
37       y = dataset[y2_stack],
38       text = dataset[y2_text],
39       hoverinfo = x+text,
40       mode = lines,
41       name = y2,
42       fill = tonexty #填充方式:到下方的另一條線
43     )
44     data_g.append(tr_2)
45 
46     tr_3 = pg.Scatter(
47       x = dataset[x],
48       y = dataset[y3_stack],
49       text = dataset[y3_text],
50       hoverinfo = x+text,
51       mode = lines,
52       name = y3,
53       fill = tonexty
54     )
55     data_g.append(tr_3)
56 
57     layout = pg.Layout(title="field area plots", xaxis={title:x}, yaxis={title:value})
58     fig = pg.Figure(data=data_g, layout=layout)
59     plotly.offline.plot(fig, filename=name)
60 
61 
62 if __name__ == __main__:
63     filled_area_plots("C:/Users/fuqia/Desktop/bar.html")

小結

本文介紹了利用python-plotly繪制數據圖的方法,實例中 線圖(line plots)、散點圖(scatter plots)、柱狀圖(bar charts)、餅圖(pie charts)以及填充堆疊線圖(filled area plots)這五種典型的圖表基本上涵蓋了大部分類型的測試數據,各位小夥伴可以加以變形繪制出更多的漂亮圖標。

文中所示代碼:test_plotly_jb51.rar

參考資料

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

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

Python使用plotly繪制數據圖表的方法