如何利用 Python 绘制动态可视化图表

 更新时间:2022年02月25日 10:18:54   作者:Python数据挖掘  
这篇文章主要介绍了如何利用 Python 绘制动态可视化图表,主要介绍介绍如何进行保存gif格式的文件。那么我们就开始进入主题,来谈一下Python当中的gif模块,需要的朋友可以参考一下

一、安装相关的模块

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

pip install gif

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

pip install "gif[altair]"    
pip install "gif[matplotlib]"
pip install "gif[plotly]"

二、gif和matplotlib的结合

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

代码如下:

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的联用之外,gifplotly之间也可以结合起来用

代码如下:

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")

output:

到此这篇关于如何利用 Python 绘制动态可视化图表的文章就介绍到这了,更多相关Python 绘制动态可视化图表内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python中安装easy_install的方法

    Python中安装easy_install的方法

    这篇文章主要介绍了Python中安装easy_install的方法,需要的朋友可以参考下
    2018-11-11
  • Python解决asyncio文件描述符最大数量限制的问题

    Python解决asyncio文件描述符最大数量限制的问题

    这篇文章主要介绍了Python解决asyncio文件描述符最大数量限制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • 一文带你掌握Python中enumerate函数和for循环的对比

    一文带你掌握Python中enumerate函数和for循环的对比

    在Python编程中,循环是一项常见的任务,而for循环是最常见的一种,然而,Python提供了enumerate函数,它允许在迭代过程中访问元素的同时获得它们的索引,下面我们就来学习一下二者的区别吧
    2023-11-11
  • python设计tcp数据包协议类的例子

    python设计tcp数据包协议类的例子

    今天小编就为大家分享一篇python设计tcp数据包协议类的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • python中的错误处理

    python中的错误处理

    异常是指程序中的例外,违例情况。异常机制是指程序出现错误后,程序的处理方法。当出现错误后,程序的执行流程发生改变,程序的控制权转移到异常处理。
    2016-04-04
  • Python自定义线程池实现方法分析

    Python自定义线程池实现方法分析

    这篇文章主要介绍了Python自定义线程池实现方法,结合实例形式较为详细的分析了Python自定义线程池的概念、原理、实现方法及相关注意事项,需要的朋友可以参考下
    2018-02-02
  • 读取本地json文件,解析json(实例讲解)

    读取本地json文件,解析json(实例讲解)

    下面小编就为大家分享一篇读取本地json文件,解析json的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • Python中函数参数调用方式分析

    Python中函数参数调用方式分析

    这篇文章主要介绍了Python中函数参数调用方式,结合实例形式分析了Python函数参数定义与使用的四种常见操作方法,需要的朋友可以参考下
    2018-08-08
  • Python reversed函数用法小结

    Python reversed函数用法小结

    reversed函数是Python中的内置函数之一,是对给定的序列返回一个逆序序列的迭代器,需要通过遍历/list/next()等方法获取作用后的值,本文给大家介绍Python reversed函数及用法,感兴趣的朋友一起看看吧
    2023-10-10
  • OpenCV中VideoCapture类的使用详解

    OpenCV中VideoCapture类的使用详解

    这篇文章主要介绍了OpenCV中VideoCapture类的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02

最新评论