Python实现动态条形图绘制的示例代码

目录
  • 动态条形图变动态柱状图
  • 指定排序方式
  • 限制条目数
  • 设置固定条目
  • 固定数值轴,使其不发生动态变化
  • 设置图像帧数,默认 10 帧
  • 设置帧率,单位时间默认为 500ms
  • 设置每帧增加的标签时间,默认为 False
  • 图形样式设置
  • 条形图属性,可以设置透明度,边框等
  • 添加动态文本
  • 添加垂直条
  • 设置柱状图颜色

两年前在 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 bcr

df = 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 bcr

df = 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 bcr

df = 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 bcr

df = 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 bcr

df = 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 bcr

df = 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 bcr

df = 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 bcr

df = 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 bcr

df = 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 bcr

df = 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'] = False

df = pd.read_csv('covid19_tutorial.csv', index_col=["date"])

def summary(values, ranks):
    # 动态文本的内容
    """
    values 为 df 的每一行(Series),例如
        Belgium            1143.0
        China              3326.0
        France             6520.0
        Germany            1275.0
        Iran               3294.0
        Italy             14681.0
        Netherlands        1490.0
        Spain             11198.0
        USA                7418.0
        United Kingdom     3611.0
        Name: 2020-04-03, dtype: float64

    ranks 则是针对 values 的值进行了排名,例如
        Belgium            1.0
        China              5.0
        France             7.0
        Germany            2.0
        Iran               4.0
        Italy             10.0
        Netherlands        3.0
        Spain              9.0
        USA                8.0
        United Kingdom     6.0
        Name: 2020-04-03, dtype: float64
    """
    all_people = int(values.sum())
    ranks_country = ranks.sort_values().index
    s = (f'总死亡人数:{all_people},'
         f'死亡人数最多的国家:{ranks_country[-1]},'
         f'死亡人数最少的国家:{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 bcr

df = 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 bcr

df = pd.read_csv('covid19_tutorial.csv', 
                 index_col=["date"])
"""
# 具体有哪些颜色,可以通过如下方式查看
from bar_chart_race._colormaps import colormaps
print(list(colormaps.keys()))
"""
bcr.bar_chart_race(df, 'covid19_horiz.gif', 
                   cmap="plotly3")

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

到此这篇关于Python实现动态条形图绘制的示例代码的文章就介绍到这了,更多相关Python动态条形图内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python制作动态词频条形图的全过程

    目录 前言 前期准备 数据的选择与获取 分词 筛选与可视化 总结 前言 "数据可视化"这个话题,相信大家并不陌生,在一些平台,经常可以看到一些动态条形图的视频,大多都是某国家 GDP 的变化或者不同国家疫情中感染人数的变化等等. 这篇文章,我们将使用 Python 绘制动态词频条形图,顾名思义,就是以词频作为数量指标的动态条形图. 前期准备 输入以下命令,安装必须的库: pip install JiashuResearchTools pip install jieba pip inst

  • Python Matplotlib绘制条形图的全过程

    目录 条形图 单组条形图 水平条形图 多组条形图 堆积条形图 对称条形图 总结 条形图 条形图具有丰富的表现形式,常见的类型包括单组条形图,多组条形图,堆积条形图和对称条形图等. 单组条形图 条形图的每种表现形式都可以绘制成垂直条形图或水平条形图,以单组条形图的两种绘制方式为例. 垂直条形图 import matplotlib.pyplot as plt data = [10., 20., 5., 15.] plt.bar(range(len(data)), data) plt.show() T

  • python+matplotlib绘制3D条形图实例代码

    本文分享的实例主要实现的是Python+matplotlib绘制一个有阴影和没有阴影的3D条形图,具体如下. 首先看看演示效果: 完整代码如下: import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D # setup the figure and axes fig = plt.figure(figsize=(8, 3)) ax1 = fig.add_subplot(121

  • Python pyecharts绘制条形图详解

    目录 一.简介 二.整理数据 1.配置主题 2.柱状图 Bar - Bar_base_dict_config 3.样例数据 Faker.choose() 4.滚动条 Bar - Bar_datazoom_slider 5.鼠标移动效果 Bar - Bar_datazoom_inside 6.显示最值 Bar - Bar_markpoint_type 7.改变滚动条在侧面 Bar - Bar_datazoom_slider_vertical 8.多个Y轴 9.直方图 Bar - Bar_histo

  • python绘制堆叠条形图介绍

    目前在网络上多是单个条形图堆叠,没看到一组的条形图堆叠. 代码如下: import numpy as np import pandas as pd import matplotlib.pyplot as plt import matplotlib.ticker as ticker 导入一组自己造的数据 data = pd.read_excel('data.xlsx') In [4]: data Out[4]: 多使用几个plt.bar()函数,就可以画出来啦... tick_label = li

  • python绘制横向水平柱状条形图

    python绘制横向水平柱状条形图Bar,供大家参考,具体内容如下 import matplotlib import random import matplotlib.pyplot as plt   # 中文乱码和坐标轴负号处理. matplotlib.rc('font', family='SimHei', weight='bold') plt.rcParams['axes.unicode_minus'] = False   #城市数据. city_name = ['北京', '上海', '广州

  • Python实现动态条形图绘制的示例代码

    目录 动态条形图变动态柱状图 指定排序方式 限制条目数 设置固定条目 固定数值轴,使其不发生动态变化 设置图像帧数,默认 10 帧 设置帧率,单位时间默认为 500ms 设置每帧增加的标签时间,默认为 False 图形样式设置 条形图属性,可以设置透明度,边框等 添加动态文本 添加垂直条 设置柱状图颜色 两年前在 B 站上看到了一个宝藏 up 主,名叫 "Jannchie见齐",专门做动态条形图样式的数据可视化. 做出的效果还是很不错的,但工具使用的是 JS,不是 Python.于是尝

  • python学习之使用Matplotlib画实时的动态折线图的示例代码

    有时,为了方便看数据的变化情况,需要画一个动态图来看整体的变化情况.主要就是用Matplotlib库. 首先,说明plot函数的说明. plt.plot(x,y,format_string,**kwargs) x是x轴数据,y是y轴数据.x与y维度一定要对应. format_string控制曲线的格式字串 下面详细说明: color(c):线条颜色 linestyle(ls):线条样式 linewidth(lw):线的粗细 关于标记的一些参数: marker:标记样式 markeredgecol

  • Python实现Matplotlib,Seaborn动态数据图的示例代码

    目录 Matplotlib Seaborn Matplotlib 效果图如下 主要使用matplotlib.animation.FuncAnimation,上核心代码, # 定义静态绘图函数 def draw_barchart(year): dff = df[df['year'].eq(year)].sort_values(by='value', ascending=True).tail(10) ax.clear() ax.barh(dff['name'], dff['value'], colo

  • Python实现二叉排序树与平衡二叉树的示例代码

    目录 前言 1. 二叉排序树 1.1 构建一棵二叉排序树 1.2 二叉排序树的数据结构 1.3 实现二叉排序树类中的方法: 2. 平衡二叉排序树 2.1 二叉平衡排序树的数据结构 3. 总结 前言 什么是树表查询? 借助具有特殊性质的树数据结构进行关键字查找. 本文所涉及到的特殊结构性质的树包括: 二叉排序树. 平衡二叉树. 使用上述树结构存储数据时,因其本身对结点之间的关系以及顺序有特殊要求,也得益于这种限制,在查询某一个结点时会带来性能上的优势和操作上的方便. 树表查询属于动态查找算法. 所

  • Python实现交通数据可视化的示例代码

    目录 1.TransBigData简介 2.数据预处理 3.数据栅格化 4.订单起讫点OD提取与聚合集计 5.交互可视化 1.TransBigData简介 TransBigData是一个为交通时空大数据处理.分析和可视化而开发的Python包.TransBigData为处理常见的交通时空大数据(如出租车GPS数据.共享单车数据和公交车GPS数据等)提供了快速而简洁的方法.TransBigData为交通时空大数据分析的各个阶段提供了多种处理方法,代码简洁.高效.灵活.易用,可以用简洁的代码实现复杂

  • Go/Python/Erlang编程语言对比分析及示例代码

    本文主要是介绍Go,从语言对比分析的角度切入.之所以选择与Python.Erlang对比,是因为做为高级语言,它们语言特性上有较大的相似性,不过最主要的原因是这几个我比较熟悉. Go的很多语言特性借鉴与它的三个祖先:C,Pascal和CSP.Go的语法.数据类型.控制流等继承于C,Go的包.面对对象等思想来源于Pascal分支,而Go最大的语言特色,基于管道通信的协程并发模型,则借鉴于CSP分支. Go/Python/Erlang语言特性对比 如<编程语言与范式>一文所说,不管语言如何层出不穷

  • 使用python画个小猪佩奇的示例代码

    基本原理 选好画板大小,设置好画笔颜色.粗细,定位好位置,依次画鼻子.头.耳朵.眼睛.腮.嘴.身体.手脚.尾巴,完事儿. 都知道,Turtle 是 Python 内置的一个比较有趣味的模块,俗称"海龟绘图",它是基于 Tkinter 模块打造,提供一些简单的绘图工具. 在海龟作图中,我们可以编写指令让一个虚拟的(想象中的)海龟在屏幕上来回移动.这个海龟带着一只钢笔,我们可以让海龟无论移动到哪都使用这只钢笔来绘制线条.通过编写代码,以各种很酷的模式移动海龟,我们可以绘制出令人惊奇的图片.

  • python爬取音频下载的示例代码

    抓取"xmly"鬼故事音频 import json # 在这个url,音频链接为JSON动态生成,所以用到了json模块 import requests headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36" } # 请求网页

  • Python实现七大查找算法的示例代码

    查找算法 -- 简介 查找(Searching)就是根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素.     查找表(Search Table):由同一类型的数据元素构成的集合     关键字(Key):数据元素中某个数据项的值,又称为键值     主键(Primary Key):可唯一的标识某个数据元素或记录的关键字 查找表按照操作方式可分为:         1.静态查找表(Static Search Table):只做查找操作的查找表.它的主要操作是:         ①

  • Python打造虎年祝福神器的示例代码

    目录 背景故事 一.Python Turtle模块画小老虎 1. 定义库以及初始化界面 2. 画出左右两只耳朵 3. 画出小老虎头部轮廓 4. 画出老虎的两只眼睛 5. 画出老虎的鼻子和嘴巴 6. 画出小老虎的左右肢体和脚趾 7. 在需要的位置写上我们的新年祝福 二.弹窗设置 三.倒计时页面设计 1. 实现清屏功能以及初始化位置 2. 显示倒数3,2,1 3. 显示我们需要的文字 4. 设定代码运行入口,调用目标函数 结果展示 源码分享 背景故事 2022虎年将至,值此新春佳节之际,各大社区更是

随机推荐