分享一个Python动态图工具sjvisualizer,轻松将数据动态展示,支持:
效果,
pip install sjvisualizer -i https://pypi.tuna.tsinghua.edu.cn/simple
通过一个例子简单介绍,输入数据长这样,
一个简单例子,
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
更多干货