一个 Python 工具,轻松让数据动起来

本文再分享一个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/

猜你喜欢

转载自blog.csdn.net/qq_34160248/article/details/129340592