分享一个Python数据可视化动画库

Crossin的编程教室

共 12093字,需浏览 25分钟

 ·

2023-11-10 16:58

入门教程、案例源码、学习资料、读者群

请访问: python666.cn


大家好,欢迎来到 Crossin的编程教室 !


今天给大家介绍一个非常棒的数据可视化库,sjvisualizer


根据时间序列数据制作动态图表,包含条形图、饼图、堆叠条形图、折线图、堆叠面积图。


可以先看一下官方的示例~


只需几行代码,就可以制作电脑浏览器发展史的动态图表。


GitHub地址:

https://github.com/SjoerdTilmans/sjvisualizer


使用pip进行该库的安装。


# 安装sjvisualizer
pip install sjvisualizer

然后需要加载特定格式的数据,下面是一个数据示例。


其中第一列中包含日期,随后的每个列标题都是数据类别,下面包含每个日期的值。


此外还可以进行一些自定义配置,比如添加图标、添加自定义颜色以及调整可视化的大小。


大家可以查看相应的文档。

https://www.sjdataviz.com/software


作者还提供了不少其它案例,并且提供了数据源。


同样可以访问如下地址,进行查看。

https://www.sjdataviz.com/data


下面就来看一下官方提供的几个示例代码吧~


/ 01 /
条形图

最受关注的Instagram账号。


数据集情况如下。


发现数据有部分缺失,说明程序会进行补全操作


具体代码如下。


from sjvisualizer import Canvas
from sjvisualizer import DataHandler
from sjvisualizer import BarRace
import json


def main(fps=60, duration=0.35):
    number_of_frames = duration * 60 * fps

    # 加载颜色配置文件
    with open('colors/colors.json'as f:
        colors = json.load(f)

    # 加载数据源
    df = DataHandler.DataHandler(excel_file="data/Insta.xlsx", number_of_frames=number_of_frames).df

    canvas = Canvas.canvas()

    # 添加条形图图表
    bar_chart = BarRace.bar_race(canvas=canvas.canvas, df=df, colors=colors)
    canvas.add_sub_plot(bar_chart)

    # 添加静态文字
    canvas.add_title("MOST FOLLOWED INSTAGRAM ACCOUNTS", color=(0132255))
    canvas.add_sub_title("By Number of Followers in Millions", color=(0132255))

    # 时间设置
    canvas.add_time(df=df, time_indicator="month")

    # 保存颜色配置文件
    with open("colors/colors.json""w"as file:
        json.dump(colors, file, indent=4)

    # 输出视频文件
    canvas.play(fps=fps, record=True, file_name="output1.mp4")


if __name__ == "__main__":
    main()



/ 02 /
饼图


桌面操作系统市场份额。


数据集情况如下,一共有200多条。


其中本次设置了中文字体,可以在代码中进行修改。


饼图动态图表代码如下。


from sjvisualizer import Canvas
from sjvisualizer import DataHandler
from sjvisualizer import PieRace
import json


def main(fps=60, duration=0.35):
    number_of_frames = duration * 60 * fps

    # 加载颜色配置文件
    with open('colors/colors.json'as f:
        colors = json.load(f)

    df = DataHandler.DataHandler(excel_file="data/DesktopOS.xlsx", number_of_frames=number_of_frames).df

    canvas = Canvas.canvas()

    # 添加饼图图表
    bar_chart = PieRace.pie_plot(canvas=canvas.canvas, df=df, colors=colors)
    canvas.add_sub_plot(bar_chart)

    # 加载静态文字
    canvas.add_title("桌面操作系统市场份额", color=(0132255))
    canvas.add_sub_title("2003 - 2009", color=(0132255))

    # 时间设置
    canvas.add_time(df=df, time_indicator="month")

    # 保存颜色配置文件
    with open("colors/colors.json""w"as file:
        json.dump(colors, file, indent=4)

    canvas.play(fps=fps, record=True, file_name="output3.mp4")


if __name__ == "__main__":
    main()



/ 03 /
合成图


电脑浏览器发展史动态图表。


可以发现每个图表都带有浏览器的logo。


如果你想要添加自定义的图像logo,是不需要进行任何编码!


只需将图像文件 (.png) 放入assets文件夹中,只要它与我们的数据类别具有相同的名称,程序就会自动选择。


合成图动态图表代码如下。


from sjvisualizer import Canvas
from sjvisualizer import DataHandler
from sjvisualizer import BarRace
from sjvisualizer import PieRace
from sjvisualizer import Date
from sjvisualizer import StackedBarChart
from sjvisualizer import LineChart
from sjvisualizer import AreaChart
import json


def main(fps=60, duration=0.35):
    number_of_frames = duration * 60 * fps

    # 加载颜色配置文件
    with open('colors/colors.json'as f:
        colors = json.load(f)

    df = DataHandler.DataHandler(excel_file="data/browsers.xlsx", number_of_frames=number_of_frames).df

    canvas = Canvas.canvas()

    width = int(canvas.canvas["width"])
    height = int(canvas.canvas["height"])

    chart_height = int(height / 3.5)

    # 条形图
    bar_chart = BarRace.bar_race(canvas=canvas.canvas, df=df, title="Bar race", colors=colors, height=chart_height,
                                 width=int(width / 6), x_pos=int(height / 3 / 2), y_pos=int(width / 5) / 2)
    canvas.add_sub_plot(bar_chart)

    # 饼图
    pie_plot = PieRace.pie_plot(canvas=canvas.canvas, df=df, title="Pie race", colors=colors, height=chart_height,
                                width=int(width / 6), x_pos=int(height / 3 / 2 * 3), y_pos=int(width / 5) / 2)
    canvas.add_sub_plot(pie_plot)

    # 堆叠图
    stacked = StackedBarChart.stacked_bar_chart(canvas=canvas.canvas, df=df, title="Stacked", colors=colors,
                                                height=chart_height,
                                                width=int(width / 6), x_pos=int(height / 3 / 2 * 5.5),
                                                y_pos=int(width / 5) / 2, number_of_bars=25)
    canvas.add_sub_plot(stacked)

    # 折线图时间线
    events = {
        "Event 1": ["28/01/1998""28/01/2000"],
        "Event 2": ["28/01/2018""28/01/2019"]
    }

    # 折线图
    line = LineChart.line_chart(canvas=canvas, df=df, title="Line chart", colors=colors, height=chart_height,
                                width=int(width / 6), x_pos=int(height / 3 / 2),
                                y_pos=int(width / 5) + 1.05 * chart_height, events=events)
    canvas.add_sub_plot(line)

    # 面积图
    area = AreaChart.area_chart(canvas=canvas, df=df, title="Area chart", colors=colors, height=chart_height,
                                width=int(width / 6), x_pos=int(height / 3 * 2),
                                y_pos=int(width / 5) + 1.05 * chart_height)
    canvas.add_sub_plot(area)

    # 时间设置
    date = Date.date(canvas=canvas.canvas, height=int(height / 20),
                     width=int(width / 20), x_pos=int(height / 3 / 2 * 8), y_pos=int(width / 5), time_indicator="month",
                     df=df)
    canvas.add_sub_plot(date)

    # 保存颜色配置文件
    with open("colors/colors.json""w"as file:
        json.dump(colors, file, indent=4)

    canvas.play(fps=fps, record=True, file_name="output2.mp4")


if __name__ == "__main__":
    main()


/ 04 /
总结


相信不少小伙伴,对自己做的静态图表平平无奇而烦恼。


那么试试动态图表,应该是个不错的选择。


不仅有新意,而且还直观+美观。


不过市面上不少工具都需要收费使用,如果你的预算不够,那么Python动态数据可视化库,倒是一个不错的选择,免费~

作者:小F

来源:法纳斯特



Crossin的第2本书码上行动:利用Python与ChatGPT高效搞定Excel数据分析已经上市了

点此查看上一本《码上行动:零基础学会Python编程》介绍

本书从 Python 和 Excel 结合使用的角度讲解处理分析数据的思路、方法与实战应用。不论是希望从事数据分析岗位的学习者,还是其他职业的办公人员,都可以通过本书的学习掌握 Python 分析数据的技能。书中创新性地将 ChatGPT 引入到教学当中,用 ChatGPT 答疑并提供实训代码,并介绍了使用 ChatGPT 辅助学习的一些实用技巧,给学习者带来全新的学习方式。


京东双十一5折优惠进行中

读者朋友们购买后可在后台联系我,加入读者交流群,Crossin会为你开启陪读模式,解答你在阅读本书时的一切疑问。


感谢转发点赞的各位~

_往期文章推荐_

分享25个实用的一行Python代码
一张图搞定Matplotlib知识点



【教程】: python

【答疑】: 666
更多资源点击阅读原文

浏览 533
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报