当前位置:   article > 正文

用python做好看的动态图像,怎样用python绘制动图_python 动图

python 动图

这篇文章主要介绍了用python做好看的动态图像,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获,下面让小编带着大家一起了解一下。

在上一期的内容当中:用Python绘制动态可视化图表,屌爆了

有粉丝问道说“是不是可以将这些动态的可视化图表保存成gif图”,小编立马就回复了说后面会写一篇相关的文章来介绍如何进行保存gif格式的文件。那么我们就开始进入主题,来谈一下Python当中的gif模块python简单代码游戏

安装相关的模块

首先第一步的话我们需要安装相关的模块,通过pip命令来安装

pip install gif

另外由于gif模块之后会被当做是装饰器放在绘制可视化图表的函数上,主要我们依赖的还是Python当中绘制可视化图表的matplotlibplotly、以及altair这些模块,因此我们还需要下面这几个库

  1. pip install "gif[altair]"     
  2. pip install "gif[matplotlib]"
  3. pip install "gif[plotly]"
gifmatplotlib的结合

我们先来看gifmatplotlib模块的结合,我们先来看一个简单的例子,代码如下

  1. import random
  2. from matplotlib import pyplot as plt
  3. import gif
  4. x = [random.randint(0100for _ in range(100)]
  5. y = [random.randint(0100for _ in range(100)]
  6. gif.options.matplotlib["dpi"] = 300
  7. @gif.frame
  8. def plot(i):
  9.     xi = x[i*10:(i+1)*10]
  10.     yi = y[i*10:(i+1)*10]
  11.     plt.scatter(xi, yi)
  12.     plt.xlim((0100))
  13.     plt.ylim((0100))
  14. frames = []
  15. for i in range(10):
  16.     frame = plot(i)
  17.     frames.append(frame)
  18. gif.save(frames, 'example.gif', duration=3.5, unit="s", between="startend")

output

b80fd540dfd35458f9be312ba199d630.gif

代码的逻辑并不难理解,首先我们需要定义一个函数来绘制图表并且带上gif装饰器,接着我们需要一个空的列表,通过for循环将绘制出来的对象放到这个空列表当中然后保存成gif格式的文件即可。

gifplotly的结合

除了和matplotlib的联用之外,gifplotly之间也可以结合起来用,代码如下

  1. import random
  2. import plotly.graph_objects as go
  3. import pandas as pd
  4. import gif
  5. df = pd.DataFrame({
  6.     't': list(range(10)) * 10,
  7.     'x': [random.randint(0100for _ in range(100)],
  8.     'y': [random.randint(0100for _ in range(100)]
  9. })
  10. @gif.frame
  11. def plot(i):
  12.     d = df[df['t'] == i]
  13.     fig = go.Figure()
  14.     fig.add_trace(go.Scatter(
  15.         x=d["x"],
  16.         y=d["y"],
  17.         mode="markers"
  18.     ))
  19.     fig.update_layout(width=500, height=300)
  20.     return fig
  21. frames = []
  22. for i in range(10):
  23.     frame = plot(i)
  24.     frames.append(frame)
  25. gif.save(frames, 'example_plotly.gif', duration=100)

output

2b0ab7910dd84e7594fa834b37e05938.gif

整体的代码逻辑和上面的相似,这里也就不做具体的说明了

matplotlib多子图动态可视化

上面绘制出来的图表都是在单张图表当中进行的,那当然了我们还可以在多张子图中进行动态可视化的展示,代码如下

  1. # 读取数据
  2. df = pd.read_csv('weather_hourly_darksky.csv')
  3. df = df.rename(columns={"time""date"})
  4. @gif.frame
  5. def plot(df, date):
  6.     df = df.loc[df.index[0]:pd.Timestamp(date)]
  7.     fig, (ax1, ax2, ax3) = plt.subplots(3, figsize=(106), dpi=100)
  8.     ax1.plot(df.temperature, marker='o', linestyle='--', linewidth=1, markersize=3, color='g')
  9.     maxi = round(df.temperature.max() + 3)
  10.     ax1.set_xlim([START, END])
  11.     ax1.set_ylim([0, maxi])
  12.     ax1.set_ylabel('TEMPERATURE', color='green')
  13.     ax2.plot(df.windSpeed, marker='o', linestyle='--', linewidth=1, markersize=3, color='b')
  14.     maxi = round(df.windSpeed.max() + 3)
  15.     ax2.set_xlim([START, END])
  16.     ax2.set_ylim([0, maxi])
  17.     ax2.set_ylabel('WIND', color='blue')
  18.     ax3.plot(df.visibility, marker='o', linestyle='--', linewidth=1, markersize=3, color='r')
  19.     maxi = round(df.visibility.max() + 3)
  20.     ax3.set_xlim([START, END])
  21.     ax3.set_ylim([0, maxi])
  22.     ax3.set_ylabel('VISIBILITY', color='red')
  23. frames = []
  24. for date in pd.date_range(start=df.index[0], end=df.index[-1], freq='1M'):
  25.     frame = plot(df, date)
  26.     frames.append(frame)
  27. gif.save(frames, "文件名称.gif", duration=0.5, unit='s')

output

3e274a8542e0a01e18b5d9078ea6f610.gif

动态气泡图

最后我们用plotly模块来绘制一个动态的气泡图,代码如下

  1. import gif
  2. import plotly.graph_objects as go
  3. import numpy as np
  4. np.random.seed(1)
  5. N = 100
  6. x = np.random.rand(N)
  7. y = np.random.rand(N)
  8. colors = np.random.rand(N)
  9. sz = np.random.rand(N) * 30
  10. layout = go.Layout(
  11.     xaxis={'range': [-22]},
  12.     yaxis={'range': [-22]},
  13.     margin=dict(l=10, r=10, t=10, b=10)
  14. )
  15. @gif.frame
  16. def plot(i):
  17.     fig = go.Figure(layout=layout)
  18.     fig.add_trace(go.Scatter(
  19.         x=x[:i],
  20.         y=y[:i],
  21.         mode="markers",
  22.         marker=go.scatter.Marker(
  23.             size=sz[:i],
  24.             color=colors[:i],
  25.             opacity=0.6,
  26.             colorscale="Viridis"
  27.         )
  28.     ))
  29.     fig.update_layout(width=500, height=300)
  30.     return fig
  31. frames = []
  32. for i in range(100):
  33.     frame = plot(i)
  34.     frames.append(frame)
  35. gif.save(frames, "bubble.gif")

output

c1f4446e6ea83f050dc362c87125c70c.gif

用Python绘制动态可视化图表,屌爆了

2022-02-17

b6fb078a14213bb351d4f6d329a9f007.png

【干货分享】推荐6个好用到爆的Pycharm插件

2022-02-16

257cc104504643b812c0c04e88dc18cf.png

【干货分享】推荐5个可以让你事半功倍的Python自动化脚本

2022-02-14

62625c8dddbca86f92099aea6d6d7765.png

没有50W彩礼 女友被强行拽走! Python数据分析全国各地的彩礼情况,细谈结一次婚到底要多少钱

2022-02-13

999197e57458207bf5d31dd423ae0f0b.png

Github年度人气最高的TOP10 Python项目

2022-02-12

78ef05314900f88b851d47383761efc6.png

分享、收藏、点赞、在看安排一下?

822fed5285dab4095ed5b77386690403.gif

bd31fa41a335990df9b31d425aa88e82.gif

b0e65eb61ed2d1e13e905faa9717dc78.gif

edb60a1ff919c8fb0ac03a29d65b4579.gif

文章知识点与官方知识档案匹配,可进一步学习相关知识
Python入门技能树首页概览422774 人正在系统学习中
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/662373
推荐阅读
相关标签
  

闽ICP备14008679号