Python使用Plotly绘图工具,绘制柱状图

Stella981
• 阅读 829

使用Plotly绘制基本的柱状图,需要用到的函数是graph_objs 中 Bar函数

通过参数,可以设置柱状图的样式。

通过barmod进行设置可以绘制出不同类型的柱状图出来。

我们先来实现一个简单的柱状图:

# -*- 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')

Python使用Plotly绘图工具,绘制柱状图

上面这个例子,就是一个简单的柱状图。

下面我们讲下另外一种图,柱状簇

实现过程则是,在基本的柱状图中,加入多租数据即可实现,柱状簇

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')

Python使用Plotly绘图工具,绘制柱状图

执行上述代码,我们可以看到如上图所示柱状簇图例

可将数据堆叠生成。

接下来在讲讲如何绘制层叠柱状图

层叠柱状图的绘制方法与柱状簇的绘制方法基本差不多

也就是对同一个柱状簇进行叠加,实现方法是对Layout中的barmode属性进行设置

barmode = 'stack'

其余参数,与柱状簇相同。

# -*- 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')

Python使用Plotly绘图工具,绘制柱状图

 瀑布式柱状图

瀑布式柱状图是层叠柱状图的另外一种表现

可以选择性地显示层叠部分来实现柱状图的悬浮效果。

# -*- 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')

Python使用Plotly绘图工具,绘制柱状图

运行上述代码,可以得到如上图所示的瀑布式柱状图。

 下面我们说说,图形样式的设置。

对于柱状图颜色与样式的设置可以通过设置下面这个案例来说明。

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')

Python使用Plotly绘图工具,绘制柱状图

 运行上述代码,可以看到上图所示图例

柱状图展示了5种金属,在某个交易日的最高涨幅与波动率情况,柱形图宽度表示相对波动率的高低

柱形图越宽,波动率越大,高度表示涨幅,红色表示上涨,绿色表示下跌。

用line设置柱状图外部线框,用width设置柱状图的宽度,用opacity设置柱状图颜色的透明度情况。

基本的柱状图情况,就讲到这里。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Wesley13 Wesley13
3年前
java 柱状图、折线图、饼状图
1.绘制柱状图://BarChartTool工具类代码packageGUIview;importHibernateTool.HibernateTools;importProductClass.Featureandfreq;importorg.hibernate.Criteria;
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
可莉 可莉
3年前
12.pyecharts详细使用教程
官方数据教程:柱状图Bar//导入柱状图BarfrompyechartsimportBar//设置行名columns"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Stella981 Stella981
3年前
Jfreechart绘制漂亮的图表
要想绘制出漂亮的图表,就必须了解图表的构成部分,将图表进行分解成N个部分。然后再对每一个部分进行渲染,设置样式:包括背景色、轮廓线条样式和颜色、填充颜色、字体大小、样式、颜色。同时,需要确保在整个项目中,图表的样式风格整体统一,统一,和谐才能打造漂亮、干净、专业的外观.1.使用JfreeChart创建柱状图,折线图,饼图,堆积柱状图,时间序列图
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这