厉害了,用Python绘制动态可视化图表,并保存成gif格式
Posted AI科技大本营
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了厉害了,用Python绘制动态可视化图表,并保存成gif格式相关的知识,希望对你有一定的参考价值。
作者 | 俊欣
来源 | 关于数据分析与可视化
最近有粉丝问道说“是不是可以将这些动态的可视化图表保存成gif图”,小编立马就回复了说后面会写一篇相关的文章来介绍如何进行保存gif格式的文件。那么我们就开始进入主题,来谈一下Python当中的gif模块。
安装相关的模块
首先第一步的话我们需要安装相关的模块,通过pip命令来安装
pip install gif
另外由于gif
模块之后会被当做是装饰器放在绘制可视化图表的函数上,主要我们依赖的还是Python当中绘制可视化图表的matplotlib
、plotly
、以及altair
这些模块,因此我们还需要下面这几个库
pip install "gif[altair]"
pip install "gif[matplotlib]"
pip install "gif[plotly]"
gif 和 matplotlib 的结合
我们先来看gif和matplotlib模块的结合,我们先来看一个简单的例子,代码如下
import random
from matplotlib import pyplot as plt
import gif
x = [random.randint(0, 100) for _ in range(100)]
y = [random.randint(0, 100) for _ in range(100)]
gif.options.matplotlib["dpi"] = 300
@gif.frame
def plot(i):
xi = x[i*10:(i+1)*10]
yi = y[i*10:(i+1)*10]
plt.scatter(xi, yi)
plt.xlim((0, 100))
plt.ylim((0, 100))
frames = []
for i in range(10):
frame = plot(i)
frames.append(frame)
gif.save(frames, 'example.gif', duration=3.5, unit="s", between="startend")
output
代码的逻辑并不难理解,首先我们需要定义一个函数来绘制图表并且带上gif
装饰器,接着我们需要一个空的列表,通过for
循环将绘制出来的对象放到这个空列表当中然后保存成gif
格式的文件即可。
gif和plotly的结合
除了和matplotlib的联用之外,gif和plotly之间也可以结合起来用,代码如下
import random
import plotly.graph_objects as go
import pandas as pd
import gif
df = pd.DataFrame(
't': list(range(10)) * 10,
'x': [random.randint(0, 100) for _ in range(100)],
'y': [random.randint(0, 100) for _ in range(100)]
)
@gif.frame
def plot(i):
d = df[df['t'] == i]
fig = go.Figure()
fig.add_trace(go.Scatter(
x=d["x"],
y=d["y"],
mode="markers"
))
fig.update_layout(width=500, height=300)
return fig
frames = []
for i in range(10):
frame = plot(i)
frames.append(frame)
gif.save(frames, 'example_plotly.gif', duration=100)
output
整体的代码逻辑和上面的相似,这里也就不做具体的说明了
matplotlib多子图动态可视化
上面绘制出来的图表都是在单张图表当中进行的,那当然了我们还可以在多张子图中进行动态可视化的展示,代码如下
# 读取数据
df = pd.read_csv('weather_hourly_darksky.csv')
df = df.rename(columns="time": "date")
@gif.frame
def plot(df, date):
df = df.loc[df.index[0]:pd.Timestamp(date)]
fig, (ax1, ax2, ax3) = plt.subplots(3, figsize=(10, 6), dpi=100)
ax1.plot(df.temperature, marker='o', linestyle='--', linewidth=1, markersize=3, color='g')
maxi = round(df.temperature.max() + 3)
ax1.set_xlim([START, END])
ax1.set_ylim([0, maxi])
ax1.set_ylabel('TEMPERATURE', color='green')
ax2.plot(df.windSpeed, marker='o', linestyle='--', linewidth=1, markersize=3, color='b')
maxi = round(df.windSpeed.max() + 3)
ax2.set_xlim([START, END])
ax2.set_ylim([0, maxi])
ax2.set_ylabel('WIND', color='blue')
ax3.plot(df.visibility, marker='o', linestyle='--', linewidth=1, markersize=3, color='r')
maxi = round(df.visibility.max() + 3)
ax3.set_xlim([START, END])
ax3.set_ylim([0, maxi])
ax3.set_ylabel('VISIBILITY', color='red')
frames = []
for date in pd.date_range(start=df.index[0], end=df.index[-1], freq='1M'):
frame = plot(df, date)
frames.append(frame)
gif.save(frames, "文件名称.gif", duration=0.5, unit='s')
output
动态气泡图
最后我们用plotly模块来绘制一个动态的气泡图,代码如下
import gif
import plotly.graph_objects as go
import numpy as np
np.random.seed(1)
N = 100
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)
sz = np.random.rand(N) * 30
layout = go.Layout(
xaxis='range': [-2, 2],
yaxis='range': [-2, 2],
margin=dict(l=10, r=10, t=10, b=10)
)
@gif.frame
def plot(i):
fig = go.Figure(layout=layout)
fig.add_trace(go.Scatter(
x=x[:i],
y=y[:i],
mode="markers",
marker=go.scatter.Marker(
size=sz[:i],
color=colors[:i],
opacity=0.6,
colorscale="Viridis"
)
))
fig.update_layout(width=500, height=300)
return fig
frames = []
for i in range(100):
frame = plot(i)
frames.append(frame)
gif.save(frames, "bubble.gif")
以上就是今天给同学们分享的小技巧,大家赶紧操练起来吧~
好消息!好消息!
Python 福利来啦,还等啥呢!现已开启招聘通道,后台+小编微信,投递你的简历呦~
招聘:Python后端开发工程师(西安)
往
期
回
顾
资讯
资讯
技术
资讯
分享
点收藏
点点赞
点在看
以上是关于厉害了,用Python绘制动态可视化图表,并保存成gif格式的主要内容,如果未能解决你的问题,请参考以下文章
Python使用matplotlib可视化绘制并导出可视化结果图表到PDF文件中