本文实例为大家分享了python使用plotly绘图工具绘制柱状图的具体代码,供大家参考,具体内容如下
使用plotly绘制基本的柱状图,需要用到的函数是graph_objs 中 bar函数
通过参数,可以设置柱状图的样式。
通过barmod进行设置可以绘制出不同类型的柱状图出来。
我们先来实现一个简单的柱状图:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
# -*- coding: utf-8 -*-
import plotly as py
import plotly.graph_objs as go
pyplt = py.offline.plot
# trace
trace_basic = [go.bar(
x = [ 'variable_1' , 'variable_2' , 'variable_3' , 'variable_4' , 'variable_5' ],
y = [ 1 , 2 , 3 , 2 , 4 ],
)]
# layout
layout_basic = go.layout(
title = 'the graph title' ,
xaxis = go.xaxis( range = [ - 0.5 , 4.5 ], domain = [ 0 , 1 ])
)
# figure
figure_basic = go.figure(data = trace_basic, layout = layout_basic)
# plot
pyplt(figure_basic, filename = 'tmp/1.html' )
|
上面这个例子,就是一个简单的柱状图。
下面我们讲下另外一种图,柱状簇
实现过程则是,在基本的柱状图中,加入多租数据即可实现,柱状簇
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
import plotly as py
import plotly.graph_objs as go
pyplt = py.offline.plot
# traces
trace_1 = go.bar(
x = [ "西南石油" , "东方明珠" , "海泰发展" ],
y = [ 4.12 , 5.32 , 0.60 ],
name = "201609"
)
trace_2 = go.bar(
x = [ "西南石油" , "东方明珠" , "海泰发展" ],
y = [ 3.65 , 6.14 , 0.58 ],
name = "201612"
)
trace_3 = go.bar(
x = [ "西南石油" , "东方明珠" , "海泰发展" ],
y = [ 2.15 , 1.35 , 0.19 ],
name = "201703"
)
trace = [trace_1, trace_2, trace_3]
# layout
layout = go.layout(
title = '净资产收益率对比图'
)
# figure
figure = go.figure(data = trace, layout = layout)
# plot
pyplt(figure, filename = 'tmp/2.html' )
|
执行上述代码,我们可以看到如上图所示柱状簇图例
可将数据堆叠生成。
接下来在讲讲如何绘制层叠柱状图
层叠柱状图的绘制方法与柱状簇的绘制方法基本差不多
也就是对同一个柱状簇进行叠加,实现方法是对layout中的barmode属性进行设置
barmode = 'stack'
其余参数,与柱状簇相同。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
# -*- coding: utf-8 -*-
import plotly as py
import plotly.graph_objs as go
pyplt = py.offline.plot
# stacked bar chart
trace_1 = go.bar(
x = [ '深证50' , '上证50' , '西南50' , '西北50' , '华中50' ],
y = [ 0.7252 , 0.9912 , 0.5347 , 0.4436 , 0.9911 ],
name = '股票投资'
)
trace_2 = go.bar(
x = [ '深证50' , '上证50' , '西南50' , '西北50' , '华中50' ],
y = [ 0.2072 , 0 , 0.4081 , 0.4955 , 0.02 ],
name = '其它投资'
)
trace_3 = go.bar(
x = [ '深证50' , '上证50' , '西南50' , '西北50' , '华中50' ],
y = [ 0 , 0 , 0.037 , 0 , 0 ],
name = '债券投资'
)
trace_4 = go.bar(
x = [ '深证50' , '上证50' , '西南50' , '西北50' , '华中50' ],
y = [ 0.0676 , 0.0087 , 0.0202 , 0.0609 , 0.0087 ],
name = '银行存款'
)
trace = [trace_1, trace_2, trace_3, trace_4]
layout = go.layout(
title = '基金资产配置比例图' ,
barmode = 'stack'
)
fig = go.figure(data = trace, layout = layout)
pyplt(fig, filename = 'tmp/1.html' )
|
瀑布式柱状图
瀑布式柱状图是层叠柱状图的另外一种表现
可以选择性地显示层叠部分来实现柱状图的悬浮效果。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
# -*- coding: utf-8 -*-
import plotly as py
import plotly.graph_objs as go
pyplt = py.offline.plot
x_data = [ '资产1' , '资产2' ,
'资产3' , '资产4' , '总资产' ]
y_data = [ 56000000 , 65000000 , 65000000 , 81000000 , 81000000 ]
text = [ '666,999,888万元' , '8,899,666万元' , '88,899,666万元' , '16,167,657万元' , '888,888,888万元' ]
# base
trace0 = go.bar(
x = x_data,
y = [ 0 , 57999848 , 0 , 66899764 , 0 ],
marker = dict (
color = 'rgba(1,1,1, 0.0)' ,
)
)
# trace
trace1 = go.bar(
x = x_data,
y = [ 57999848 , 8899916 , 66899764 , 16167657 , 83067421 ],
marker = dict (
color = 'rgba(55, 128, 191, 0.7)' ,
line = dict (
color = 'rgba(55, 128, 191, 1.0)' ,
width = 2 ,
)
)
)
data = [trace0, trace1]
layout = go.layout(
title = '测试图例' ,
barmode = 'stack' ,
showlegend = false
)
annotations = []
for i in range ( 0 , 5 ):
annotations.append( dict (x = x_data[i], y = y_data[i], text = text[i],
font = dict (family = 'arial' , size = 14 ,
color = 'rgba(245, 246, 249, 1)' ),
showarrow = false,))
layout[ 'annotations' ] = annotations
fig = go.figure(data = data, layout = layout)
pyplt(fig, filename = 'tmp/1.html' )
|
运行上述代码,可以得到如上图所示的瀑布式柱状图。
下面我们说说,图形样式的设置。
对于柱状图颜色与样式的设置可以通过设置下面这个案例来说明。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
import plotly as py
import plotly.graph_objs as go
pyplt = py.offline.plot
# customizing individual bar colors
volume = [ 0.49 , 0.71 , 1.43 , 1.4 , 0.93 ]
width = [each * 3 / sum (volume) for each in volume]
trace0 = go.bar(
x = [ 'au.shf' , 'ag.shf' , 'sn.shf' ,
'pb.shf' , 'cu.shf' ],
y = [ 0.85 , 0.13 , - 0.93 , 0.46 , 0.06 ],
width = width,
marker = dict (
color = [ 'rgb(205,38,38)' , 'rgb(205,38,38)' ,
'rgb(34,139,34)' , 'rgb(205,38,38)' ,
'rgb(205,38,38)' ],
line = dict (
color = 'rgb(0,0,0)' ,
width = 1.5 ,
)),
opacity = 0.8 ,
)
data = [trace0]
layout = go.layout(
title = '有色金属板块主力合约日内最高涨幅与波动率图' ,
xaxis = dict (tickangle = - 45 ),
)
fig = go.figure(data = data, layout = layout)
pyplt(fig, filename = 'tmp/4.html' )
|
运行上述代码,可以看到上图所示图例
柱状图展示了5种金属,在某个交易日的最高涨幅与波动率情况,柱形图宽度表示相对波动率的高低。
柱形图越宽,波动率越大,高度表示涨幅,红色表示上涨,绿色表示下跌。
用line设置柱状图外部线框,用width设置柱状图的宽度,用opacity设置柱状图颜色的透明度情况。
基本的柱状图情况,就讲到这里。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/u012798683/article/details/88800743