sjvisualizer,一个超强的Python数据可视化动画库

分享一个Python动态图工具sjvisualizer,轻松将数据动态展示,支持:

  • Bar races(竞速柱状图)
  • Animated pie charts(竞速饼图)
  • Animated stacked bar charts(竞速堆叠条形图)
  • Animated line charts(竞速折线图)

效果,

sjvisualizer安装

pip install sjvisualizer -i https://pypi.tuna.tsinghua.edu.cn/simple

sjvisualizer使用

通过一个例子简单介绍,输入数据长这样,

sjvisualizer,一个超强的Python数据可视化动画库_第1张图片

一个简单例子, 

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 StaticImage
from sjvisualizer import LineChart
from sjvisualizer import AreaChart
import time
import json


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

    number_of_frames = duration * 60 * fps

    # 导入颜色盘,
    with open('data/colors.json') as f:
        colors = json.load(f)
    ##DataHandler.DataHandler处理数据并在每个数据点之间进行插值
    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)

    # BarRace.bar_race制作竞速柱状图
    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)

    # PieRace.pie_plot制作竞速饼图
    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)

    # StackedBarChart.stacked_bar_chart制作竞速堆叠柱状图
    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"]
    }

    # LineChart.line_chart构建竞速折线图
    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)

    # AreaChart.area_chart构建竞速面积图
    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)

    # StaticImage.static_image将静态图像添加到动态图中,也就是图中的那个logo
    img = StaticImage.static_image(
        canvas=canvas.canvas,
        file="test.jpeg",
        width=height / 7,
        height=height / 7,
        x_pos=width / 3 * 2.25,
        y_pos=height / 1.4)
    canvas.add_sub_plot(img)

    canvas.play(fps=fps)
    #canvas.play(fps=fps, record=True, file_name="subplot.mp4") #直接存储为mp4格式


if __name__ == "__main__":
    main()

进一步学习:https://github.com/SjoerdTilmans/sjvisualizer

更多干货

你可能感兴趣的:(信息可视化,python,开发语言)