如何利用 Python 绘制动态可视化图表
作者:Python数据挖掘 发布时间:2022-11-23 17:14:37
标签:Python,绘制,动态,可视化,图表
一、安装相关的模块
首先第一步的话我们需要安装相关的模块,通过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")
output:
来源:https://blog.csdn.net/qq_34160248/article/details/123052069
0
投稿
猜你喜欢
- 本文实例讲述了python中栈的原理及实现方法。分享给大家供大家参考,具体如下:栈(stack),有些地方称为堆栈,是一种容器,可存入数据元
- 问题:根据数据某列进行分组,选择其中另一列大小top-K的的所在行数据解析:求解思路很清晰,即先用groupby对数据进行分组,然后再根据分
- 所有的计算机程序都可以大致分为两类:脚本型(单次运行)和连续运行型(直到用户主动退出)。脚本型:脚本型的程序包括最早的批处理文件以及使用Py
- CREATE OR REPLACE VIEW BLOG_V_ADMIN (ID,NICK
- 前言所需要安装的库有:pip install opencv-pythonpip install matplotlibPython接口帮助文档
- PJBLOG3的相关日志,现在网上好像还没有谁有相关的修改说明吧,反正升级之后,正好有必要,也就写了个,在这里也给大家共享共享。当前相关日志
- 试官: 听说你熟悉python,那么你能简单阐述一下python的装饰器、生成器以及迭代器么?我: emm, 我不清楚,我只是了解过pyth
- 本文实例讲述了python简单获取数组元素个数的方法。分享给大家供大家参考。具体如下:mySeq = [1,2,3,4,5] p
- 一、前言这篇文章介绍如何将一个ASP.NET Core应用程序在Docker中进行部署。开发工具使用的是Visual Studio 2019
- jQuery之父John Resig写过一篇《Sub-Pixel Problems in CSS》,一个50px宽的div中有4个float
- 前言上一节我们讲解了数据类型以及字符串中几个需要注意的地方,这节我们继续讲讲字符串行数同时也讲其他内容和穿插的内容,简短的内容,深入的讲解。
- //by zdzhuo <html> <head> <script type=
- 如下所示:import numpy as np# 等差数列print(np.linspace(0.1, 1, 10, endpoint=Tr
- 这篇文章主要介绍了python 数据生成excel导出(xlwt,wlsxwrite)代码实例,文中通过示例代码介绍的非常详细,对大家的学习
- 1. 引入mybatis-plus相关包,pom.xml文件2. 配置文件application.property增加多库配置mysql 数
- Github是目前世界上最流行的代码存储和分享平台,而PyCharm是Python圈中最流行的IDE,它很好地支持了Git操作。本文将会
- 1、接口概述1)、什么是接口?接口是提供了一种用以说明一个对象应该具有哪些方法的手段。尽管它可以表明这些方法的语义,但它并不规定这些方法应该
- 在使用JavaScriptSerializer.Serialize 方法转json对象时,遇到一个问题,后台方法生成的json字符串中有没有
- 一、先让飞机在屏幕上飞起来吧。(一)实现飞机类class Plane: def __init__(self,fil
- 二维矩阵的transpose函数:不晓得该怎么起头,直接上干货。transpose()简单来说,就相当于数学中的转置,在矩阵中,转置就是把行