pyecharts-柱形图

从官网的例子中整理、合并的

from pyecharts.globals import CurrentConfig, OnlineHostType
CurrentConfig.ONLINE_HOST = OnlineHostType.NOTEBOOK_HOST

柱形图常用基本设置

from pyecharts.charts import Bar
from pyecharts import options as opts
from pyecharts.globals import ThemeType
from pyecharts.commons.utils import JsCode  # 背景图片用# 设置容器大小,使用的主题
bar = Bar(init_opts=opts.InitOpts(
    width='850px', height='350px', 
    # 使用主题
    theme=ThemeType.ESSOS,
    # 背景颜色/图片
    bg_color='black'/{"type": "pattern", "image": JsCode("img"), "repeat": "no-repeat"}
))
# 添加x轴数据
bar.add_xaxis(list型的)
# 添加y轴数据
bar.add_yaxis(series_name='第一个系列的名称',list型的第一个系列的数据,
               # 是否要堆叠,
               stack='stack0'/'stack1'/'stack',
               # 系列颜色
               color='red'/'#CC33FF',
               # 该系列不显示标签
               label_opts=opts.LabelOpts(is_show=False),
               # 不同类别(同系列)柱间间隔;同类(不同系列)柱间间隔
               category_gap='15%', gap='5%',
               # 使用哪个y轴
               yaxis_index=0,
              )
# 添加y轴,第2个y轴的设置
bar.extend_axis(yaxis_opts=opts.AxisOpts(
    name='新增y轴名称', type_='value'/'category'/'time'
    min_=, max_=, interval=,position='left'/'right',offset=,
    axislabel_opts=opts.LabelOpts(formatter='{value}/元')
))
# 全局设置
bar.set_global_opts(title_opts=, datazoom_opts=opts.DataZoomOpts(),
                    # x轴标签旋转
                   xaxis_opts=opts.AxisOpts(name='',axislabel_opts=opts.LabelOpts(rotate=-15)),
                   # 第1个y轴的设置
                   yaxis_opts=opts.AxisOpts(name='', ))
# 设置所有系列
bar.set_series_opts(
    # 所有系列的标签都不显示
    label_opts=opts.LabelOpts(is_show=False),
    # 设置标记点和标记线
    markpoint_opts=opts.MarkPointOpts(
                        data=[opts.MarkPointItem(type_='max', name='最高值'),opts.MarkPointItem(type_='min', name='最低值')]
    ),
    markline_opts=opts.MarkLineOpts(
    data=[opts.MarkLineItem(type_='average', name='平均值')]
    )
) 
# 交换轴成条形图
bar.reversal_axis()
# 在src中设置图片地址
bar.add_js_funcs(
    """
    var img = new Image(); img.src = 'https://hbimg.huabanimg.com/3ec361f4774ff0efede19eb326df31aad331b673be714-C5MS3e';
    """
)
import pandas as pd
import numpy as np
data = pd.DataFrame(np.random.randint(20,50,(50,3)), columns=['A','B','C'], index=pd.period_range('2020/5/10',periods=50,freq='D'))
data.head()

A B C
2020-05-10 40 31 48
2020-05-11 49 28 30
2020-05-12 40 21 42
2020-05-13 30 21 33
2020-05-14 48 34 40

1 堆叠柱形图

-使用主题
-添加区域选择组件按钮
-x轴的区域缩放
-坐标轴标签旋转

from pyecharts.charts import Bar
from pyecharts import options as opts
from pyecharts.globals import ThemeType
​
bar1 = Bar(init_opts=opts.InitOpts(width='850px', height='350px', theme=ThemeType.ESSOS))
bar1.add_xaxis(data.index.strftime('%m-%d').tolist()) # 要显示在x轴上的数据
bar1.add_yaxis('A', data['A'].tolist(),stack='stack')# 显示堆积的时候加上这个参数
bar1.add_yaxis('B', data['B'].tolist(),stack='stack')
bar1.add_yaxis('C', data['C'].tolist(),stack='stack')
bar1.set_global_opts(title_opts={'text':'堆积-主题-区域选择-缩放','subtext':'dict配置'},
                    brush_opts=opts.BrushOpts(tool_box=['rect','clear'],  # 添加区域选择组件按钮
                                             brush_link=[0,2]),  # 0对应A,1是C,选择A系列,C也会选中
                    datazoom_opts=opts.DataZoomOpts(),  # x轴的区域缩放
                    xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15))# 坐标轴标签旋转
                    )
​
​
bar1.render_notebook()

在这里插入图片描述

2 双坐标轴

-柱间距离
-两个堆叠,一个不堆叠
-两个y坐标轴的刻度、名称、标签
-标签可以是:bar.set_series_opts(label_opts=opts.LabelOpts())全部设置,
也可以在add_yaxis(label_opts=xx)单独为每一个系列设置

from pyecharts.charts import Line
​
bar = Bar(init_opts=opts.InitOpts(height='350px', width='950px', theme=ThemeType.VINTAGE))
bar.add_xaxis(xaxis_data=data.index.strftime('%m-%d').tolist())
bar.add_yaxis('A市', data['A'].tolist(),stack='stack0',category_gap='15%',gap='5%')  #柱间距离:同一系列(不同天的),不同系列(同一天的)
bar.add_yaxis('B市', data['B'].tolist(),stack='stack0')
bar.add_yaxis('C市', (data['C']+30).tolist())
# 添加次坐标轴
bar.extend_axis(yaxis=opts.AxisOpts(name='全省', type_='value', min_=0, max_=180, interval=30,
                                    axislabel_opts=opts.LabelOpts(formatter='{value} 万元')# 坐标轴标签格式
                                   ) 
               )
bar.set_global_opts(title_opts={'text':'双坐标轴'},
                    xaxis_opts=opts.AxisOpts(
                        name='时间',
                        axislabel_opts=opts.LabelOpts(rotate=-15)),
                    yaxis_opts=opts.AxisOpts(name='市级'),  # 主坐标轴设置
                    datazoom_opts=opts.DataZoomOpts(),
                    )
bar.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) 
​
line = Line()
line.add_xaxis(xaxis_data=data.index.strftime('%m-%d').tolist())
line.add_yaxis('全省', y_axis=data.sum(1).tolist(),
               yaxis_index=1,  # 使用第二个轴
              label_opts=opts.LabelOpts(is_show=False),
              linestyle_opts=opts.LineStyleOpts(width=1, color='black'))
​
bar.overlap(line).render_notebook()

在这里插入图片描述

3 图片背景

-系列颜色设置 -分割线 -标记点、标记线显示

from pyecharts.commons.utils import JsCode
bar = Bar(init_opts=opts.InitOpts(width='720px', height='450px', # 注意图的大小,这里并没有完全展示图片
                                  # 使用图片背景
                                  bg_color={"type": "pattern", "image": JsCode("img"), "repeat": "no-repeat"}
                                 )
          )
bar.add_xaxis(xaxis_data=data.index.strftime('%m-%d').tolist()) # 要显示在x轴上的数据
bar.add_yaxis('', data['A'].tolist(), color='#009999') # 系列颜色
bar.set_global_opts(title_opts={'text':'背景图片-分割线-标记'},
                    yaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=True)),# 网格分割线
                    )
bar.set_series_opts(markpoint_opts=opts.MarkPointOpts(
                        data=[opts.MarkPointItem(type_='max', name='最高值'),
                              opts.MarkPointItem(type_='min', name='最低值'),
                             ]
                    ),
                    markline_opts=opts.MarkLineOpts(
                    data=[
                        opts.MarkLineItem(type_='average', name='平均值')
                    ]))
# 在src中设置图片地址
bar.add_js_funcs(
    """
    var img = new Image(); img.src = 'https://hbimg.huabanimg.com/3ec361f4774ff0efede19eb326df31aad331b673be714-C5MS3e';
    """
)
bar.render_notebook()

在这里插入图片描述

4 直方图-使用BarItem逐条添加

-可以设置每个条形的样式

y = []
x =[]
color=['#009999','#33CCCC','#66CCCC','#66FFCC','#CCFF99','#99FF66','#99FF00']
for i,j in zip((data.index.strftime('%m-%d')[:7]).tolist(),color):
    x.append(i)
    y.append(opts.BarItem(name=i, value=np.random.randint(10,20), itemstyle_opts=opts.ItemStyleOpts(color=j)))
​
bar = Bar(init_opts=opts.InitOpts(height='350px', width='850px'))
bar.add_xaxis(x)
bar.add_yaxis('', y, category_gap=0)  # 间隔=0,直方图
bar.set_global_opts(title_opts=opts.TitleOpts(title='使用BarItem逐条添加'))
bar.render_notebook()

在这里插入图片描述

5 多重y轴

-提示工具
-bar的系列颜色:官网中直接设置的color参数,但柱形颜色和轴颜色没有对应,需要在itemstyle_opts中设置

itemstyle_opts=opts.ItemStyleOpts
from pyecharts.charts import Line,Bar
from pyecharts import options as opts
colors=['#009999','#33CCCC','#d14a61']
​
line = Line(init_opts=opts.InitOpts(width='950px', height='350px'))
line.add_xaxis(xaxis_data=data.index.strftime('%m-%d').tolist())
line.add_yaxis('价格', data['A'].tolist(),yaxis_index=0, color=colors[0], label_opts=opts.LabelOpts(is_show=False))
line.extend_axis(
    yaxis=opts.AxisOpts(type_='value', name='销量', 
                        axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts(color=colors[1])),
                        position='right'
                       )
)
line.extend_axis(
    yaxis=opts.AxisOpts(type_='value', name='库存量', 
                        axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts(color=colors[2])),
                        position='right',offset=50
                       )
)
line.set_global_opts(
    yaxis_opts=opts.AxisOpts(
        type_='value', name='价格',
        axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts(color=colors[0])),
        position='left',
        splitline_opts=opts.SplitLineOpts(is_show=True)
),
    tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"),  # 提示组件交叉型
    datazoom_opts=opts.DataZoomOpts()
                    )
​
bar = Bar()
bar.add_xaxis(xaxis_data=data.index.strftime('%m-%d').tolist())
bar.add_yaxis('销量', data['B'].tolist(), yaxis_index=1, itemstyle_opts=opts.ItemStyleOpts(color=colors[1]))
bar.add_yaxis('库存量', data['C'].tolist(), yaxis_index=2, itemstyle_opts=opts.ItemStyleOpts(color=colors[2]))
bar.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
​
line.overlap(bar).render_notebook()

在这里插入图片描述

6 条形图-交换轴

-y轴的区域缩放
-取消默认显示某系列(需要加上系列名称)

data.index.strftime('%m-%d').tolist()
bar = Bar(init_opts=opts.InitOpts(width='850px', height='350px'))
bar.add_xaxis(xaxis_data=data.index.strftime('%m-%d').tolist())
bar.add_yaxis('A',data['A'].tolist(),label_opts=opts.LabelOpts(position='right'))
bar.add_yaxis('B',data['B'].tolist(),label_opts=opts.LabelOpts(position='right'), 
              is_selected=False)
bar.reversal_axis()
bar.set_global_opts(datazoom_opts=opts.DataZoomOpts(orient='vertical'))
bar.render_notebook()

在这里插入图片描述

7 添加时间轴的

pie+bar

from pyecharts.charts import Timeline,Pie
​
def get_overlap(i):
    bar = Bar(init_opts=opts.InitOpts(width='850px', height='350px'))
    bar.add_xaxis(xaxis_data=data.columns.tolist())
    bar.add_yaxis('A市', data.loc[i].tolist(), itemstyle_opts=opts.ItemStyleOpts(color='#CCFF99'))
    bar.add_yaxis('B市', (data.loc[i]*np.random.rand(3)+0.5).astype(int).tolist(),itemstyle_opts=opts.ItemStyleOpts(color='#009999'))
    bar.set_global_opts(tooltip_opts=opts.TooltipOpts(is_show=True, trigger='axis', axis_pointer_type='shadow'))
​
    pie = Pie()
    pie.add('全省占比', data_pair=[
        ['18岁以下', (data.loc[i]/data.loc[i].sum())[0]],
        ['18-60', (data.loc[i]/data.loc[i].sum())[1]],
        ['60以上', (data.loc[i]/data.loc[i].sum())[2]],
    ],
           center=['80%', '30%'],
           radius='30%')
    pie.set_global_opts(tooltip_opts=opts.TooltipOpts(is_show=True, trigger='item'))
    return bar.overlap(pie)
​
​
timeline = Timeline(init_opts=opts.InitOpts(width='850px', height='350px'))
for i in data.index:
    timeline.add(get_overlap(i), time_point=i.strftime('%m-%d'))
    
# timeline.add_schema(is_auto_play=True, play_interval=1000) 自动播放
timeline.add_schema(is_auto_play=False)
timeline.render_notebook()

在这里插入图片描述

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值