本文再分享一个Python工具pynimate,轻松让数据动起来。
了解我的小伙伴都知道,之前分享过几个工具的,它们优缺点明显:
-
bar_chart_race 只支持条形图,功能单一;
-
pandas_alive 功能更强大,支持条形图、地图、饼图、散点图等多类图形;
-
Flourish 无需代码,也支持多种图形;
pynimate和 bar_chart_race 差不多,功能单一,只支持条形图。
pynimate安装
pynimate只支持Python 3.9以上版本,如果电脑中有低版本Python,可构建一个Python3.9版本虚拟环境,
conda create -n py39 python=3.9
conda activate py39
pip install pynimate -i https://pypi.tuna.tsinghua.edu.cn/simple
技术交流
技术要学会分享、交流,不建议闭门造车。一个人走的很快、一堆人可以走的更远。
本文来自技术群粉丝分享整理,文章源码、数据、技术交流,均可加交流群获取,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友。
方式①、添加微信号:pythoner666,备注:来自CSDN +备注来意
方式②、微信搜索公众号:Python学习与数据挖掘,后台回复:加群
pynimate使用
代码
from matplotlib import pyplot as plt
import numpy as np
import pandas as pd
import os
import matplotlib as mpl
import pynimate as nim
mpl.rcParams['font.family'] = 'DejaVu Sans' #切换系统支持的字体
#定义post_update,设置插值频率
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("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()
#图形保存
cnv.save("test", 24, "mp4") #保存为mp4格式
#cnv.save("test", 24, "mp4") #保存为gif格式
传送门:https://julkaar9.github.io/pynimate/