Python pyecharts绘制条形图详解


Posted in Python onApril 02, 2022

一、简介

关于具体详情,请咨询:pyecharts官网

pyecharts是一个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可。而Python 是一门富有表达力的语言,很适合用于数据处理。当数据分析遇上数据可视化时,pyecharts诞生了。Echarts是用JS来写的,而我们使用pyecharts则可以使用Python来调用里面的API。

优点:

简洁的 API 设计,使用如丝滑般流畅,支持链式调用

囊括了 30+ 种常见图表,应有尽有

支持主流 Notebook环境,Jupyter Notebook 和 JupyterLab

可轻松集成至 Flask,Django 等主流 Web 框架

高度灵活的配置项,可轻松搭配出精美的图表

详细的文档和示例,帮助开发者更快的上手项目

多达 400+地图文件以及原生的百度地图,为地理数据可视化提供强有力的支持。

二、整理数据

安装:

pip install pyecharts

1、配置主题

Bar(init_opts=opts.InitOpts(theme=ThemeType.LIGHT)) # 第一种
Bar({"theme": ThemeType.MACARONS}) # 第二种

Python pyecharts绘制条形图详解

Python pyecharts绘制条形图详解

2、柱状图 Bar - Bar_base_dict_config

import os
from matplotlib import pyplot as plt 
from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.commons.utils import JsCode
from pyecharts.globals import ThemeType
list1=cnbodfsort['REGION'].tolist()
list2=cnbodfsort['PRICE'].tolist()
list3=cnbodfsort['PERSONS'].tolist()

c = (
    Bar(init_opts=opts.InitOpts(theme=ThemeType.LIGHT))
    .add_xaxis(list1)
    .add_yaxis("票价", list2, stack="stack1", category_gap="50%")
    .add_yaxis("人次", list3,   stack="stack1",category_gap="50%")
    .set_series_opts(
        label_opts=opts.LabelOpts(
            position="right",
            formatter=JsCode(
                "function(x){return Number(x.data).toFixed(2);}"
            ),
        )
    )
    .set_global_opts(
        xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),
        title_opts=opts.TitleOpts(title='中国电影票房',subtitle='按地区比较票价与人次')
    )
)
# c.render("cnbo1.html") # 生成html图片
# os.system("cnbo01.html")  # 执行完代码直接跳出来图片
c.render_notebook() # 直接在代码区域展示图片

Python pyecharts绘制条形图详解

3、样例数据 Faker.choose()

使用这段代码会随机调用系统的样例参数:

.add_xaxis(Faker.choose())

Python pyecharts绘制条形图详解

from pyecharts.faker import Faker

list1=cnbodfsort['REGION'].tolist()
list2=cnbodfsort['PRICE'].tolist()
list3=cnbodfsort['PERSONS'].tolist()

c = (
    Bar({"theme": ThemeType.MACARONS})  ### 配置好看的图表主题!!!
    .add_xaxis(Faker.choose())    ### 这句话表示使用随机的后台样例数据
    .add_yaxis("票价", list2, stack="stack1", category_gap="50%")
    .add_yaxis("人次", list3,   stack="stack1",category_gap="50%")
    .set_series_opts(
        label_opts=opts.LabelOpts(
            position="right",
            formatter=JsCode(
                "function(x){return Number(x.data).toFixed(2);}"
            ),
        )
    )
    .set_global_opts(
        xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),
        title_opts={"text":"样例数据","subtext":"使用Faker.choose()"}
    )
)
c.render("cnbo1.html") # 生成html图片
# os.system("cnbo1.html")  # 执行完代码直接跳出来图片
c.render_notebook() # 直接在代码区域展示图片

4、滚动条 Bar - Bar_datazoom_slider

datazoom_opts=opts.DataZoomOpts()

表示可以滑动的滚动条:

list1=cnbodfsort['REGION'].tolist()
list2=cnbodfsort['PRICE'].tolist()
list3=cnbodfsort['PERSONS'].tolist()

c = (
    Bar(init_opts=opts.InitOpts(theme=ThemeType.LIGHT))
    .add_xaxis(list1)
    .add_yaxis("票价", list2, stack="stack1", category_gap="50%")
    .add_yaxis("人次", list3,   stack="stack1",category_gap="50%")
    .set_series_opts(
        label_opts=opts.LabelOpts(
            position="right",
            formatter=JsCode(
                "function(x){return Number(x.data).toFixed(2);}"
            ),
        )
    )
    .set_global_opts(
        xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),
        title_opts=opts.TitleOpts(title='中国电影票房',subtitle='按地区比较票价与人次'),
         brush_opts=opts.BrushOpts() ,### 使用这个可以使图片的右上角多出来一些工具
        datazoom_opts=opts.DataZoomOpts(), ### 可以使最下面多出滚动条
    )
)
c.render("cnbo2.html") # 生成html图片
# os.system("cnbo01.html")  # 执行完代码直接跳出来图片
c.render_notebook() # 直接在代码区域展示图片

Python pyecharts绘制条形图详解

5、鼠标移动效果 Bar - Bar_datazoom_inside

根据鼠标来放大与缩小的效果:

from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.faker import Faker

c = (
    Bar()
    .add_xaxis(Faker.days_attrs)
    .add_yaxis("商家A", Faker.days_values, color=Faker.rand_color())
    .set_global_opts(
        title_opts=opts.TitleOpts(title="Bar-DataZoom(inside)"),
        datazoom_opts=opts.DataZoomOpts(type_="inside"),
    )
    .render("bar_datazoom_inside.html")
)

Python pyecharts绘制条形图详解

6、显示最值 Bar - Bar_markpoint_type

list1=cnbodfsort['REGION'].tolist()
list2=cnbodfsort['PRICE'].tolist()
list3=cnbodfsort['PERSONS'].tolist()

c = (
    Bar(init_opts=opts.InitOpts(theme=ThemeType.HALLOWEEN))
    .add_xaxis(list1)
    .add_yaxis("票价", list2, stack="stack1", category_gap="50%")
    .add_yaxis("人次", list3,   stack="stack1",category_gap="50%")
    .set_series_opts(
        label_opts=opts.LabelOpts(
            position="right",
            formatter=JsCode(
                "function(x){return Number(x.data).toFixed(2);}"
            ),
        ),
        markpoint_opts=opts.MarkPointOpts( #########
            data=[
            opts.MarkPointItem(type_="max", name="最大值"),
            opts.MarkPointItem(type_="min", name="最小值"),
            opts.MarkPointItem(type_="average", name="平均值"),
        ]
           ),#########
    )
    .set_global_opts(
        xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),
        title_opts=opts.TitleOpts(title='中国电影票房',subtitle='按地区比较票价与人次'),
         brush_opts=opts.BrushOpts() ,### 使用这个可以使图片的右上角多出来一些工具
        datazoom_opts=opts.DataZoomOpts(orient='vertical'), 
    )
)
c.render("cnbo2.html") # 生成html图片
# os.system("cnbo01.html")  # 执行完代码直接跳出来图片
c.render_notebook() # 直接在代码区域展示图片

Python pyecharts绘制条形图详解

Python pyecharts绘制条形图详解

7、改变滚动条在侧面 Bar - Bar_datazoom_slider_vertical

list1=cnbodfsort['REGION'].tolist()
list2=cnbodfsort['PRICE'].tolist()
list3=cnbodfsort['PERSONS'].tolist()

c = (
    Bar(init_opts=opts.InitOpts(theme=ThemeType.CHALK))
    .add_xaxis(list1)
    .add_yaxis("票价", list2, stack="stack1", category_gap="50%")
    .add_yaxis("人次", list3,   stack="stack1",category_gap="50%")
    .set_series_opts(
        label_opts=opts.LabelOpts(
            position="right",
            formatter=JsCode(
                "function(x){return Number(x.data).toFixed(2);}"
            ),
        )
    )
    .set_global_opts(
        xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),
        title_opts=opts.TitleOpts(title='中国电影票房',subtitle='按地区比较票价与人次'),
         brush_opts=opts.BrushOpts() ,### 使用这个可以使图片的右上角多出来一些工具
        datazoom_opts=opts.DataZoomOpts(orient='vertical'), 
    )
)
c.render("cnbo2.html") # 生成html图片
# os.system("cnbo01.html")  # 执行完代码直接跳出来图片
c.render_notebook() # 直接在代码区域展示图片

Python pyecharts绘制条形图详解

8、多个Y轴

colors=['#5793f3','#d14a61','#675bba']
legend_list=['票房','人次','价格','评价']
list1=cnbodfsort['REGION'].tolist()
list2=cnbodfsort['PRICE'].tolist()
list3=cnbodfsort['PERSONS'].tolist()
list4=cnbodfsort['BO'].tolist()
list5=cnbodfsort['points'].tolist()
c = (
    Bar(init_opts=opts.InitOpts(theme=ThemeType.CHALK,width="1600px",height="600px"))
    .add_xaxis(list1)
    .add_yaxis("评分", list5,yaxis_index=0,category_gap="50%",color=colors[2])
    .add_yaxis("票价", list2,yaxis_index=0,category_gap="50%",color=colors[0])
    .add_yaxis("人次", list3,yaxis_index=0,category_gap="50%",color=colors[1])
    
    .set_series_opts(
        label_opts=opts.LabelOpts(
            position="top",
            formatter=JsCode(
                "function(x){return Number(x.data).toFixed(2);}"
            ),
        ),
        markpoint_opts=opts.MarkPointOpts(
            data=[
            opts.MarkPointItem(type_="max", name="最大值"),
            opts.MarkPointItem(type_="min", name="最小值"),
            opts.MarkPointItem(type_="average", name="平均值"),
               ]
           ),
    )    
    .extend_axis(
    yaxis=opts.AxisOpts(
        name="票房",
        type_="value",
        min_=1000,
        max_=150000,
        interval=10000,
        position="right",
        axislabel_opts=opts.LabelOpts(formatter="{value} 万")
    )
    )
    
    .extend_axis(
    yaxis=opts.AxisOpts(
        name="评价",
        type_="value",
        min_=0,
        max_=11,
        interval=1,
        position="left",
        axislabel_opts=opts.LabelOpts(formatter="{value} 点"),
        axisline_opts=opts.AxisLineOpts(
            linestyle_opts=opts.LineStyleOpts(color=colors[2])
        ),
        splitline_opts=opts.SplitLineOpts(
            is_show=True,linestyle_opts=opts.LineStyleOpts(opacity=1)
        ),
        )
    )
    
        .set_global_opts(
            yaxis_opts=opts.AxisOpts(
                type_="value",
                name="票价",
                min_=10,
                max_=70,
                position="right",
                offset=80,
                axisline_opts=opts.AxisLineOpts(
                    linestyle_opts=opts.LineStyleOpts(color=colors[0])
            ),
            axislabel_opts=opts.LabelOpts(formatter="{value} 元"),
        ),

        tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"),
        datazoom_opts=opts.DataZoomOpts(orient='vertical'),
        toolbox_opts=opts.ToolboxOpts(pos_left='120%'),
        legend_opts=opts.LegendOpts(is_show=False),
    )
 )
line = (
    Line()
    .add_xaxis(xaxis_data=x_data)
    .add_yaxis(
        series_name="票房",
        yaxis_index=1,
        y_axis=list4,
        label_opts=opts.LabelOpts(is_show=False),
    )
)
c.render_notebook() # 直接在代码区域展示图片

双Y轴:

Python pyecharts绘制条形图详解

9、直方图 Bar - Bar_histogram

# Bar - Bar_histogram
from pyecharts.options.global_options import ThemeType
from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.faker import Faker

c = (
    Bar({"theme":ThemeType.DARK})
    .add_xaxis(cnboregiongb.index.tolist())
    .add_yaxis("数量", cnboregiongb.values.tolist(), category_gap=0, color=Faker.rand_color())
    .set_global_opts(title_opts=opts.TitleOpts(title="Bar-直方图"))
)
c.render_notebook()

Python pyecharts绘制条形图详解

以上就是Python pyecharts绘制条形图详解的详细内容,更多关于Python pyecharts条形图的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python对数组进行反转的方法
May 20 Python
Python实现队列的方法
May 26 Python
pandas中Timestamp类用法详解
Dec 11 Python
基于Python开发chrome插件的方法分析
Jul 07 Python
python 实现语音聊天机器人的示例代码
Dec 02 Python
python多线程http压力测试脚本
Jun 25 Python
树莓派安装OpenCV3完整过程的实现
Oct 10 Python
python selenium自动化测试框架搭建的方法步骤
Jun 14 Python
django orm模块中的 is_delete用法
May 20 Python
python代码实现将列表中重复元素之间的内容全部滤除
May 22 Python
Python Tkinter图形工具使用方法及实例解析
Jun 15 Python
Python:__eq__和__str__函数的使用示例
Sep 26 Python
Python OpenCV超详细讲解读取图像视频和网络摄像头
基于Python实现股票收益率分析
python实现对doc、txt、xls等文档的读写操作
Apr 02 #Python
Python OpenCV超详细讲解基本功能
python函数的两种嵌套方法使用
Apr 02 #Python
Python OpenCV超详细讲解调整大小与图像操作的实现
Python实现提取PDF简历信息并存入Excel
Apr 02 #Python
You might like
php session 预定义数组
2009/03/16 PHP
C#静态方法与非静态方法实例分析
2014/09/22 PHP
ThinkPHP控制器间实现相互调用的方法
2014/10/31 PHP
Laravel 5.0 发布 新版本特性详解
2015/02/10 PHP
php安装ssh2扩展的方法【Linux平台】
2016/07/20 PHP
PHP反射API示例分享
2016/10/08 PHP
PHP重载基础知识回顾
2020/09/10 PHP
在每个匹配元素的外部插入新元素的方法
2013/12/20 Javascript
Javascript排序算法之计数排序的实例
2014/04/05 Javascript
纯js实现遮罩层效果原理分析
2014/05/27 Javascript
js中for in语句的用法讲解
2015/04/24 Javascript
JS正则表达式比较常见用法
2016/01/26 Javascript
JS实现列表页面隔行变色效果
2017/03/25 Javascript
快速解决brew安装特定版本flow的问题
2018/05/17 Javascript
jsonp跨域及实现百度首页联想功能的方法
2018/08/30 Javascript
JavaScript使用闭包模仿块级作用域操作示例
2019/01/21 Javascript
JavaScript中数组去重的5种方法
2020/07/04 Javascript
Vue 组件复用多次自定义参数操作
2020/07/27 Javascript
基于vue项目设置resolves.alias: '@'路径并适配webstorm
2020/12/02 Vue.js
[47:45]Liquid vs OG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[01:01:22]VGJ.S vs OG 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
Python中对列表排序实例
2015/01/04 Python
python实现排序算法解析
2018/09/08 Python
python实现简单聊天室功能 可以私聊
2019/07/12 Python
Python爬虫教程知识点总结
2020/10/19 Python
python 从list中随机取值的方法
2020/11/16 Python
用python计算文件的MD5值
2020/12/23 Python
HTML5如何实现元素拖拽
2016/03/11 HTML / CSS
JSF面试题:Jsf中的核心类用那些?有什么作用?LiftCycle六大生命周期是什么?
2014/07/17 面试题
促销活动总结怎么写
2014/06/25 职场文书
受资助学生感谢信
2015/01/21 职场文书
2015年“我们的节日·中秋节”活动总结
2015/07/30 职场文书
教师节随笔
2015/08/15 职场文书
2016年大学生暑假爱心支教活动策划书
2015/11/26 职场文书
护士医德医风心得体会
2016/01/25 职场文书
简单介绍 http请求响应参数、无连接无状态、MIME、状态码、端口、telnet、curl
2021/03/31 HTML / CSS