如何利用 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
投稿
猜你喜欢
- Dreamweaver快捷键大全,记住一些常用的快捷键会大大提高你的网页设计效率,如果你都使用快捷键,那么如果你去面试工作就容易被录取,呵呵
- 内部/内嵌函数1、定义:在一个函数的函数体内使用关键字def关键字定义一个新的函数,这个新的函数就叫做内部/内嵌函数。2、注意点:内部函数的
- 本文实例为大家分享了Python实现神经网络算法及应用的具体代码,供大家参考,具体内容如下首先用Python实现简单地神经网络算法:impo
- 说在最前不知道小伙伴们在写代码的时候有没有区分开numpy.abs和abs函数,别小看这两个函数,如果在写程序的时候正确区分使用这两个函数可
- 当您使用FILESYSTEMOBJECT(fso)对象获得某个目录下的文件列表的时候,你有没有发现无法控制它们的排序方式,比如按照名字排序,
- JS获取网页中HTML元素的几种方法分析:getElementById getElementsByName getElementsByTag
- Asp中Server.ScriptTimeOut属性需要注意的一点Server.ScriptTimeout?这个属性给定Asp脚本执行的最大
- 如下所示:import re# 过滤不了\\ \ 中文()还有————r1 = u'[a-zA-Z0-9'!"#$
- <%@ language=vbscript codepage=65001%> <
- 本文实例讲述了Python面向对象中类(class)的简单理解与用法。分享给大家供大家参考,具体如下:我们先来创建一个简单的类class F
- 使用Django中遇到这样一个需求,对一个表的几个字段做 联合唯一索引,例如学生表中 姓名和班级 2个字段在一起表示一个唯一记录。Djang
- Python实现AES算法密码学课程老师留的作业,我觉得用python实现更简单,就用python写了一个加解密的程序。程序分成三个部分,一
- 系统自带模块(库)```cppimport retarget = 'abc1234xyz're.search('(\
- Python 类/对象Python 是一种面向对象的编程语言。Python 中的几乎所有东西都是对象,拥有属性和方法。类(Class)类似对
- excel 文件内容如下:读取excel内容:import xlrdfrom datetime import datetimefrom xl
- 命名空间: 每一个作用域变量存储的位置,或者解释为 存储作用域中变量的字典。作用: 获取想查看某个作用域中的变量名、变量值。使用方法: lo
- 在使用Dreamweaver制作主页的时候往往需要改变表格的高度。然而有时当我们拖动表格的边框,无论怎样拖动,等到放下鼠标,表格却又恢复到原
- 作为一门脚本语言,写脚本时执行系统命令可以说很常见了,python提供了相关的模块和方法。os模块提供了访问操作系统服务的功能,由于涉及到操
- 折线图是数据分析中非常常用的图形。其中,折线图主要是以折线的上升或下降来表示统计数量的增减变化的统计图。用于分析自变量和因变量之间的趋势关系
- 在我们制作主页的过程中,用到表格的地方非常多,灵活运用表格技巧可以为我们的网页增色不少,这里我就详细介