Python实现动态条形图的示例详解
作者:Python 发布时间:2021-05-18 13:40:38
标签:Python,动态,条形图
关于数据可视化的模块,之前已经分享过很多了,小伙伴们可以到历史文章中搜索,不过都是静态的可视化数据展示效果。
这几天刚刚发现的这款动态数据可视化模块pynimate值得一提。
它可以将返回的pandas.DataFrame数据对象直接进行解析,最后显示为可视化动态数据。
https://github.com/julkaar9/pynimate
https://julkaar9.github.io/pynimate/
上述分别是pynimate模块的GitHub源码地址和接口API文档地址,可以参考完成相应的数据可视化。
目前,官方的API文档只提供了一个条形图的源代码实例,可能大佬平台太忙了没有时间写文档吧!
from matplotlib import pyplot as plt
import pandas as pd
import pynimate as nim
df = pd.DataFrame(
{
"time": ["1960-01-01", "1961-01-01", "1962-01-01"],
"Afghanistan": [1, 2, 3],
"Angola": [2, 3, 4],
"Albania": [1, 2, 5],
"USA": [5, 3, 4],
"Argentina": [1, 4, 5],
}
).set_index("time")
cnv = nim.Canvas()
bar = nim.Barplot(df, "%Y-%m-%d", "2d")
bar.set_time(callback=lambda i, datafier: datafier.data.index[i].strftime("%b, %Y"))
cnv.add_plot(bar)
cnv.animate()
plt.show()
直接使用pip的方式安装pynimate模块,需要注意的是该模块直接支持的是3.9以上的python版本,各个镜像站应该都有提供。
pip install pynimate
pip install matplotlib
pip install pandas
安装完成之后,我们直接启动当前的.py模块会出现下面的动态条形图的效果。
相比其他的python可视化模块,pynimate比较优秀的是它可以将动态图形的执行过程直接保存为Gif格式的动态图片。
cnv.save("file", 24, "gif")
另外,该pynimate模块作者也提供了可以通过自定义的方式去设置可视化动态图形的方式供我们可以参考。
from matplotlib import pyplot as plt
import numpy as np
import pandas as pd
import os
dir_path = os.path.dirname(os.path.realpath(__file__))
import pynimate as nim
def post_update(ax, i, datafier, bar_attr):
ax.spines["top"].set_visible(False)
ax.spines["right"].set_visible(False)
ax.spines["bottom"].set_visible(False)
ax.spines["left"].set_visible(False)
ax.set_facecolor("#001219")
for bar, x, y in zip(
bar_attr.top_bars,
bar_attr.bar_length,
bar_attr.bar_rank,
):
ax.text(
x - 0.3,
y,
datafier.col_var.loc[bar, "continent"],
ha="right",
color="k",
size=12,
)
df = pd.read_csv(dir_path + "/data/sample.csv").set_index("time")
col = pd.DataFrame(
{
"columns": ["Afghanistan", "Angola", "Albania", "USA", "Argentina"],
"continent": ["Asia", "Africa", "Europe", "N America", "S America"],
}
).set_index("columns")
bar_cols = {
"Afghanistan": "#2a9d8f",
"Angola": "#e9c46a",
"Albania": "#e76f51",
"USA": "#a7c957",
"Argentina": "#e5989b",
}
cnv = nim.Canvas(figsize=(12.8, 7.2), facecolor="#001219")
bar = nim.Barplot(
df, "%Y-%m-%d", "3d", post_update=post_update, rounded_edges=True, grid=False
)
bar.add_var(col_var=col)
bar.set_bar_color(bar_cols)
bar.set_title("Sample Title", color="w", weight=600)
bar.set_xlabel("xlabel", color="w")
bar.set_time(
callback=lambda i, datafier: datafier.data.index[i].strftime("%b, %Y"), color="w"
)
bar.set_text(
"sum",
callback=lambda i, datafier: f"Total :{np.round(datafier.data.iloc[i].sum(),2)}",
size=20,
x=0.72,
y=0.20,
color="w",
)
bar.set_bar_annots(color="w", size=13)
bar.set_xticks(colors="w", length=0, labelsize=13)
bar.set_yticks(colors="w", labelsize=13)
bar.set_bar_border_props(
edge_color="black", pad=0.1, mutation_aspect=1, radius=0.2, mutation_scale=0.6
)
cnv.add_plot(bar)
cnv.animate()
plt.show()
上面通过自定义的方式实现动态条形图效果更加炫酷,给开发者保留了更多的发挥空间,结果展示如下。
来源:https://mp.weixin.qq.com/s/Bqca3Gg1Cwdt-eoksYuZrA


猜你喜欢
- 本文实例讲述了微信小程序开发之animation循环动画实现的让云朵飘效果。分享给大家供大家参考,具体如下:微信小程序提供了实现动画的api
- 在写cmu14-445的project时,我希望在本地vscode编辑代码,然后在docker中编译和测试代码。但是如果测试出了问题,直接在
- 在Apache和FastCGI上使用Django,你需要安装和配置Apache,并且安装mod_fastcgi。 请参见Apache和mod
- 做WEB前台开发也有两年多,在开发中经常要涉及到DOM编程,我想大家也跟我一样,经常要处理各种DOM编程的操作,今天我就拿一个lightbo
- 昨天晚上在家里把WM设计好的好台界面做成Html,在家里只用IE8和FF做了测试,感觉还行,除了感觉IE8还不成熟,渲染比较慢且不稳定外,标
- 这里其实并不需要其它的什么函数来支持,只需要使用MYSQL提供的一些SQL语句就可以了。这里为了简单起见,以MYSQL的系统表USER为例,
- 下面代码的功能是先训练一个简单的模型,然后保存模型,同时保存到一个pb文件当中,后续可以从pd文件里读取权重值。import tensorf
- 1. map的使用golang中的map是一种数据类型,将键与值绑定到一起,底层是用哈希表实现的,可以快速的通过键找到对应的值。类型表示:m
- 自己写的小工具,可以直接获取csdn文章并转换为markdown格式效果图核心代码from PySide2.QtWidgets import
- 摘要:现代网站和web应用程序趋向于依赖客户端的大量的javascript来提供丰富的交互。特别是通过不刷新页面的异步请求来返回数据或从服务
- 1 简介大家好,我们在日常使用 Python 的过程中,经常会使用 json 格式存储一些数据,尤其
- 在之前一篇文章里尝试了跨浏览器的数据共享,最后提到使用LocalConnection还可以实现跨浏览器消息交互的可行性。花了两个晚上简略的研
- 大家都知道很多控件是没有clicked信号的,我在网上找了很多终于总结出2个方法来实现类似需求,比如给QLineEdit添加clicked信
- 1.理解mask()和setmask()一般是在pyqt绘图时常见,而且在显示不规则图形时更是常见。参考书籍上说:setMask()函数的作
- Opencv-Python图像透视变换cv2.warpPerspective代码如下:# -*- coding:utf-8 -*-impor
- 若你使用过 Shell 中的 awk 工具,会发现用它来分割字符串是非常方便的。特别是多个连续空格会被当做一个处理。[root@localh
- 本文实例讲述了Flask框架实现的前端RSA加密与后端Python解密功能。分享给大家供大家参考,具体如下:前言在使用 Flask 开发用户
- 最近有个小项目,需要爬取页面上相应的资源数据后,保存到本地,然后将原始的HTML源文件保存下来,对HTML页面的内容进行修改将某些标签整个给
- 0.摘要在Python中,尤其是数组当中,对于一些异常值往往需要进行特殊处理。为了防止异常值与正常数据混淆,影响最终计算结果,常用的方法是将
- sql语句有一个非常长的sql,用编辑器打开编写的时候太长了导致编写非常吃力,而且容易错乱,我想做的是把A,B,C三个变量赋值到sql中的字