[python]bar_chart_race绘制动态条形图

最近在 B 站上看到了一个宝藏 up 主,名叫 "Jannchie见齐",专门做动态条形图相关的数据可视化。

可以看到做出的效果还是很不错的,但工具使用的是 JS,不是 Python,于是尝试搜索了一下,看看 Python 有没有相关的库能够做出动态条形图相关的效果。幸运的是还真有相关的库,叫 bar_chart_race,那么下面就来看看相关的用法。

老规矩,使用之前先安装,直接 pip install bar-chart-race 即可。

使用方法

下面来看看使用方法。

import pandas as pd
import bar_chart_race as bcr# 如果出现SSL错误,则全局取消证书验证
# import ssl
# ssl._create_default_https_context = ssl._create_unverified_context# 获取数据
df = pd.read_csv('covid19_tutorial.csv', index_col=["date"])
# 生成 GIF 图像
bcr.bar_chart_race(df, "covid19_horiz.gif")

我们看到代码非常简单,就是将数据转成 pandas 的 DataFrame,然后调用 bar_chart_race 即可生成 GIF 图像。

整体还是不错的,然后我们重点来看一下数据:

其中表头就是 GIF 图表中 Y 轴的部分,但需要注意的是,我们的图表是随时间不断变化的,所以我们在生成 DataFrame 的时候必须将 date 字段设置为索引。然后数据随着时间不断变化,并且条形图之间会根据数据的大小进行排序。

当然了,以上只是默认生成的,bar_chart_race 里面还有很多的参数,我们来看一下。

动态条形图变动态柱状图
import pandas as pd
import bar_chart_race as bcrdf = pd.read_csv('covid19_tutorial.csv', index_col=["date"])
bcr.bar_chart_race(df, "covid19_horiz.gif", orientation='v')

我们看到为了避免文字发生重叠,自动倾斜了,所以还是比较人性化的。

排序方式,默认为降序
import pandas as pd
import bar_chart_race as bcrdf = pd.read_csv('covid19_tutorial.csv', index_col=["date"])
# 设置排序方式
bcr.bar_chart_race(df, "covid19_horiz.gif", sort='asc')

条目数限制
import pandas as pd
import bar_chart_race as bcrdf = pd.read_csv('covid19_tutorial.csv', index_col=["date"])
# 设置最多能显示的条目数,这里最多显示 6 条
bcr.bar_chart_race(df, 'covid19_horiz.gif', n_bars=6)

设置固定类目
import pandas as pd
import bar_chart_race as bcrdf = pd.read_csv('covid19_tutorial.csv', index_col=["date"])
# 选取如下 5 个国家的数据
bcr.bar_chart_race(df, 'covid19_horiz.gif', fixed_order=['Iran', 'USA', 'Italy', 'Spain', 'Belgium'])

固定数值轴,使其不发生动态变化
import pandas as pd
import bar_chart_race as bcrdf = pd.read_csv('covid19_tutorial.csv', index_col=["date"])
# 设置数值的最大值,固定数值轴
bcr.bar_chart_race(df, 'covid19_horiz.gif', fixed_max=True)

设置图像帧数,默认 10 帧
import pandas as pd
import bar_chart_race as bcrdf = pd.read_csv('covid19_tutorial.csv', index_col=["date"])
# 图像帧数:数值越小,越不流畅;越大,越流畅
bcr.bar_chart_race(df, 'covid19_horiz.gif', steps_per_period=3)

可以看到,动图变得不流畅了。

设置帧率,单位时间默认为 500ms
import pandas as pd
import bar_chart_race as bcrdf = pd.read_csv('covid19_tutorial.csv', index_col=["date"])
# 设置帧率为 200ms,总共 20 帧
bcr.bar_chart_race(df, 'covid19_horiz.gif', steps_per_period=20, period_length=200)

设置每帧增加的标签时间,默认为 False
import pandas as pd
import bar_chart_race as bcrdf = pd.read_csv('covid19_tutorial.csv', index_col=["date"])
bcr.bar_chart_race(df, 'covid19_horiz.gif', interpolate_period=True)

绘图属性设置
import pandas as pd
import bar_chart_race as bcrdf = pd.read_csv('covid19_tutorial.csv', index_col=["date"])
# figsize:设置画布大小,默认 (6, 3.5)
# dpi:图像分辨率,默认 144
# label_bars:显示柱状图的数值信息,默认为 True;指定为 False 则不显示;指定为字典,则自定义显示属性
# period_label:显示时间标签信息,默认为 True;指定为 False 则不显示;指定为字典,则自定义显示属性
# period_fmt:设置日期格式
# title:图表标题
# title_size:标题字体大小
# shared_fontdict:全局字体属性,例如 {'family': 'Helvetica', 'weight': 'bold', 'color': 'rebeccapurple'}
bcr.bar_chart_race(df, 'covid19_horiz.gif', figsize=(5, 3), dpi=100, label_bars=False,period_label={'x': .99, 'y': .1, 'ha': 'right', 'color': 'red'},title='COVID-19 Deaths by Country')

条形图属性,可以设置透明度,边框等
import pandas as pd
import bar_chart_race as bcrdf = pd.read_csv('covid19_tutorial.csv', index_col=["date"])
# bar_kwargs:条形图属性
bcr.bar_chart_race(df, 'covid19_horiz.gif', bar_kwargs={'alpha': .2, 'ec': 'black', 'lw': 3})

添加动态文本
import pandas as pd
import bar_chart_race as bcr
import matplotlib.pyplot as plt# 设置字体,否则无法显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']  # Windows
# plt.rcParams['font.sans-serif'] = ['Hiragino Sans GB'] # Mac
plt.rcParams['axes.unicode_minus'] = Falsedf = pd.read_csv('covid19_tutorial.csv', index_col=["date"])def summary(values, ranks):# 动态文本的内容"""values 为 df 的每一行(Series),例如Belgium            1143.0China              3326.0France             6520.0Germany            1275.0Iran               3294.0Italy             14681.0Netherlands        1490.0Spain             11198.0USA                7418.0United Kingdom     3611.0Name: 2020-04-03, dtype: float64ranks 则是针对 values 的值进行了排名,例如Belgium            1.0China              5.0France             7.0Germany            2.0Iran               4.0Italy             10.0Netherlands        3.0Spain              9.0USA                8.0United Kingdom     6.0Name: 2020-04-03, dtype: float64"""all_people = int(values.sum())ranks_country = ranks.sort_values().indexs = f'总死亡人数:{all_people},死亡人数最多的国家:{ranks_country[-1]},死亡人数最少的国家:{ranks_country[0]}'# 设置文本位置、数值、大小、颜色等return {'x': .99, 'y': .05, 's': s, 'ha': 'right', 'size': 8}
# 添加文本
bcr.bar_chart_race(df, 'covid19_horiz.gif', period_summary_func=summary)

添加垂直条
import pandas as pd
import bar_chart_race as bcrdf = pd.read_csv('covid19_tutorial.csv', index_col=["date"])
# 设置垂直条数值,分位数
def func(values, ranks):return values.quantile(.9)
# 添加垂直条
bcr.bar_chart_race(df, 'covid19_horiz.gif', perpendicular_bar_func=func)

设置柱状图颜色
import pandas as pd
import bar_chart_race as bcrdf = pd.read_csv('covid19_tutorial.csv', index_col=["date"])
bcr.bar_chart_race(df, 'covid19_horiz.gif', cmap="plotly3")

那么颜色都有哪些呢?

from pprint import pprint
from bar_chart_race._colormaps import colormaps
pprint(list(colormaps.keys()))
"""
['dark12','dark12_r','plotly3','viridis','cividis','inferno','magma','plasma','blackbody','bluered','electric',........
"""

柱状图颜色不重复
import pandas as pd
import bar_chart_race as bcrdf = pd.read_csv('covid19_tutorial.csv', index_col=["date"])
bcr.bar_chart_race(df, 'covid19_horiz.gif', cmap="plotly3", filter_column_colors=True)

以上就是绝大部分配置,当然源码中注释写的也比较详细,可以点进去看一下。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/762132.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

100个openharmony开源demo:1.日历

准备用开发者手机写100个开源的demo不知道能不能实现,日拱一卒,期待蜕变。 第一个demo:日历,借鉴了网上的日历算法,自己用arkts写了界面和点击事件,各位可根据此demo写自己的日历选择器等组件。 1.目录结…

ISO 8601:日期和时间的国际标准

ISO 8601 介绍 ISO 8601,介绍一下 ISO 8601 是由国际标准化组织(International Organization for Standardization,ISO)发布的国际标准,其全称为《数据存储和交换形式信息交换日期和时间的表示方法》。 这一标准提供了…

【网站项目】293学生用品采购系统

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

供应链投毒预警 | 恶意Py组件tohoku-tus-iot-automation开展窃密木马投毒攻击

概述 上周(2024年3月6号),悬镜供应链安全情报中心在Pypi官方仓库(https://pypi.org/)中捕获1起新的Py包投毒事件,Python组件tohoku-tus-iot-automation 从3月6号开始连续发布6个不同版本恶意包&#xff0c…

sentinel系统负载自适应流控

系统负载自适应流控 规则配置 规则创建 public class SystemRule extends AbstractRule {private double highestSystemLoad -1;private double highestCpuUsage -1;private double qps -1;private long avgRt -1;private long maxThread -1; }SystemRule类包含了以下几…

数据机构-2(顺序表)

线性表 概念 顺序表 示例&#xff1a;创建一个存储学生信息的顺序表 表头&#xff08;Tlen总长度&#xff0c; Clen当前长度&#xff09; 函数 #include <seqlist.c> #include <stdio.h> #include <stdlib.h> #include "seqlist.h" #include &…

Arcade绘制各种各样的文本

""" Example showing how to draw text to the screen.If Python and Arcade are installed, this example can be run from the command line with: python -m arcade.examples.drawing_text """ import arcade# 设置屏幕参数 SCREEN_WIDTH 12…

[GYCTF2020]Ezsqli ---不会编程的崽

又是sql新题型哦。继续收集&#xff01; 既然知道是sql注入就不墨迹了。初步判断盲注&#xff0c;判断盲注的方发不用说了吧&#xff0c;然后fuzz一下&#xff0c;information被过滤了。再次可以判断为盲注与无列名注入。 管他有列名还是无列名&#xff0c;先找到表。由于info…

kafka学习笔记01(小滴课堂)

介绍分布式流处理平台kafka快速认知 介绍分布式流处理平台kafka核心概念解释 急速部署-Kafka相关环境准备和安装 Linux环境下Zookeeper和Kafka安装启动 解压两个软件的压缩包&#xff1a; tar -zxvf 启动zk: 去log目录进行查看&#xff1a; 查看一下2181端口是否被占用: 安装…

十九、网络编程

目录 一、什么是网络编程二、网络编程三要素2.1 IP2.2 InetAddress的使用2.3 端口号2.4 协议 三、UDP通信程序3.1 发送数据3.2 接收数据3.3 练习 四、UDP的三种通信方式五、TCP的通信程序六、三次握手和四次挥手七、练习7.1 TCP通信练习1——多发多收7.2 TCP通信练习2——接收和…

Java疫苗接种管理系统

本系统lw为2024-3-21本人原创&#xff0c;查chong13% 1.3W字&#xff0c;可以直接上交&#xff0c;这并不是乱七八糟的技术文档和项目文档。 4.2 功能结构设计 可视化的疫苗接种管理系统功能结构设计主要包括以下几个模块&#xff1a; 登录注册模块&#xff1a;这个模块负责…

浅浅迈入C++门槛

从今天起&#xff0c;我要开始hello&#xff0c;world。 往后更要做到&#xff0c;拳打数据结构&#xff0c;脚踢Linux。 这就是江湖人的风范。 拼搏百天&#xff0c;我要学希普拉斯普拉斯。 C是在C的基础之上&#xff0c;容纳进去了面向对象编程思想&#xff0c;并增加了许…

echarts实践总结(常用二):折线图(特点:渐变、面积区域)

目录 第一章 echarts基本使用 第二章 echarts实践——折线图 效果展示 第一章 echarts基本使用 Echarts常用配置项(详细入门)_echarts配置项手册-CSDN博客 柱状图案例&#xff1a; echarts实践总结(常用一)&#xff1a;柱状图&#xff08;特点&#xff1a;渐变色、点击缩放、…

vue3父子通信、跨层通信

子传父 通过 ref标识 获取真实的 dom对象或者组件实例对象 父组件获取子组件内部属性和方法 顶层组件向任意的底层组件传递数据和方法&#xff0c;实现跨层组件通信 非响应式数据父修改不了子的内容 子组件调用父组件方法

【现代C++】范围基于的for循环

现代C中的范围基于的for循环&#xff08;range-based for loop&#xff09;是C11引入的一项特性&#xff0c;旨在简化对容器或范围的迭代过程。这种循环语法不仅使代码更清晰易读&#xff0c;还减少了迭代时的错误。以下是范围基于的for循环的详细介绍&#xff1a; 1. 基本用法…

CTK插件框架学习-源码下载编译(01)

1、编译环境 window11、vs17、Qt5.14.0、cmake3.27.4 2、下载链接 cmake&#xff1a;Index of /files/v3.20 qt&#xff1a;Index of / vs22以前的版本需要登录下载&#xff1a;Visual Studio 较旧的下载 - 2019、2017、2015 和以前的版本 vs22下载&#xff1a;下载 Visu…

Arduino IDE工程代码多文件编程和中文设置

一、esp8266模块信息 二、中英文切换 点击文件( File )–选择首选项( Preference )—选择语言( Language )—选择中文–点击确定( OK ) 三、多文件编程 在Arduino编程中&#xff0c;将代码分割成多个文件是一种很好的做法&#xff0c;特别是项目变得越来越大和复杂时。这样…

Linux 系统是如何收发⽹络包的

Linux 系统是如何收发⽹络包的&#xff1f; ⽹络模型 为了使得多种设备能通过⽹络相互通信&#xff0c;和为了解决各种不同设备在⽹络互联中的兼容性问题&#xff0c;国际标准化组织制定了开放式系统互联通信参考模型&#xff08;Open System Interconnection Reference Mode…

亚马逊云科技:企业如何开启生成式AI之旅?

如果要评选最近两年全球科技行业最热门的细分领域&#xff0c;那么生成式AI绝对会以遥遥领先的票数成为当仁不让的冠军。 然而眼见生成式AI发展得如火如荼&#xff0c;越来越多的企业却陷入了深深的焦虑&#xff1a;应该如何开启生成式AI之旅&#xff1f;又该怎样搭建大模型&am…

对七层代理、四层代理、正向代理、反向代理的认识

一、理解nginx服务代理 Nginx代理有正向和反向代理两种类型&#xff0c;可以基于osi七层模型中的第四层&#xff08;传输层&#xff09;和第七层&#xff08;应用层&#xff09;进行代理 注&#xff1a; nginx 一般支持的是7层代理&#xff0c;支持四层代理一般使用 lvs 或者ha…