Python利用pynimate实现制作动态排序图

Python利用pynimate实现制作动态排序图

什么是pynimate

pynimate是一个Python模块,用于可视化数据的动画制作。它基于Matplotlib构建,可以使用Matplotlib已有的绘图工具,创建动态、交互的图表。

pynimate构建于Matplotlib之上,因此,它的使用方法与Matplotlib非常相似,只需要稍作调整就可以将静态图转换成动态图,而且pynimate能够自动将图表转换成可播放的动画,无需使用其他工具。

制作动态排序图的步骤

  1. 准备数据

无论是制作静态还是动态排序图,数据都是必不可少的。在这里我们以一些姓氏在2010年至2020年的年度出现频率为例。

# 准备数据

import pandas as pd

data = {"Last_name": ["Smith", "Johnson", "Brown", "Taylor", "Miller"],
        "2010": [1000, 950, 800, 700, 500],
        "2011": [1050, 1000, 820, 750, 520],
        "2012": [1100, 1050, 840, 780, 550],
        "2013": [1150, 1100, 900, 820, 580],
        "2014": [1200, 1150, 940, 870, 610],
        "2015": [1250, 1200, 980, 910, 640],
        "2016": [1300, 1250, 1020, 950, 670],
        "2017": [1350, 1300, 1060, 990, 700],
        "2018": [1400, 1350, 1100, 1030, 730],
        "2019": [1450, 1400, 1140, 1070, 760],
        "2020": [1500, 1450, 1180, 1110, 790]}

df = pd.DataFrame(data)
  1. 安装pynimate

pynimate是不自带的模块,所以我们需要先安装它。可以使用pip命令进行安装。

# 安装pynimate

!pip install pynimate
  1. 设置图表

接下来我们要设置列表的样式和标签,以便后续使用。

# 设置图表

import matplotlib.pyplot as plt
import matplotlib.animation as animation

fig, ax = plt.subplots(figsize=(10, 6))

ax.set_xlim(0, 1500)
ax.set_ylim(0, 5)

ax.set_xlabel("出现频率", fontsize=12)
ax.set_ylabel("姓氏", fontsize=12)

ax.set_yticks(df.index)
ax.set_yticklabels(df["Last_name"], fontsize=12)

ax.invert_yaxis()

bars = ax.barh(df.index, df["2010"], align='center')
  1. 定义更新函数

定义一个函数用于更新图表,每帧的变换都将在该函数中实现。

# 定义更新函数

def update(num):
    year = str(num+2010)

    ax.set_title("姓氏在"+year+"年度出现频率", fontsize=14)

    values = df[year].values
    indices = values.argsort()[::-1]

    sorted_data = dict()
    sorted_data["Last_name"] = df["Last_name"].iloc[indices]
    sorted_data[year] = df[year].iloc[indices]

    for i, y in enumerate(sorted_data[year]):
        bars[i].set_width(y)
        bars[i].set_color('#4682B4')

    return bars
  1. 制作动画

最后,我们使用FuncAnimation功能来构建动画。该功能接收几个必要的参数,一个是图表的实例ax,一个是更新函数update,还需要设置总共需要更新的帧数frames。

# 制作动态排序图

ani = animation.FuncAnimation(fig, update, frames=range(11), interval=1000)
plt.show()

这段代码将生成一个可以在Jupyter Notebook界面内直接播放的动态图表。

示例一:不同颜色的动态排序图

如果你觉得默认颜色有些单调,可以考虑通过调整颜色方案来让图表更有视觉吸引力。

# 调整颜色的动态排序图

def update_colors(num, colors):
    year = str(num+2010)

    ax.set_title("姓氏在"+year+"年度出现频率", fontsize=14)

    values = df[year].values
    indices = values.argsort()[::-1]

    sorted_data = dict()
    sorted_data["Last_name"] = df["Last_name"].iloc[indices]
    sorted_data[year] = df[year].iloc[indices]

    for i, y in enumerate(sorted_data[year]):
        bars[i].set_width(y)
        if sorted_data["Last_name"].iloc[i] in colors:
            bars[i].set_color(colors[sorted_data["Last_name"].iloc[i]])
        else:
            bars[i].set_color('#4682B4')

    return bars

colors = {"Smith": "#FF5733", "Johnson": "#C70039", "Taylor": "#900C3F"}

ani = animation.FuncAnimation(fig, update_colors, frames=range(11), fargs=(colors,), interval=1000)
plt.show()

在这个例子里,我们利用了fargs参数,将颜色方案传递给update函数。update_colors是一个修改过的函数,用于动态生成柱状图的颜色。

示例二:交互式动态排序图

在pynimate模块中,我们可以添加回调函数,在图表上添加按钮和滑块等控件,实现交互式动态排序图的制作。

# 交互式动态排序图

def update_interact(year):
    ax.set_title("姓氏在"+year+"年度出现频率", fontsize=14)

    values = df[year].values
    indices = values.argsort()[::-1]

    sorted_data = dict()
    sorted_data["Last_name"] = df["Last_name"].iloc[indices]
    sorted_data[year] = df[year].iloc[indices]

    for i, y in enumerate(sorted_data[year]):
        bars[i].set_width(y)
        bars[i].set_color('#4682B4')

    return bars

def on_slider_change(event):
    year = str(int(event))
    update_interact(year)

from matplotlib.widgets import Slider

year_slider_ax = fig.add_axes([0.15, 0.1, 0.7, 0.05])
year_slider = Slider(year_slider_ax, 'Year', 2010, 2020, valinit=2010, valstep=1)

year_slider.on_changed(on_slider_change)

plt.subplots_adjust(bottom=0.3)

update_interact('2010')

plt.show()

在这个例子里,我们添加了一个滑块作为控件,可以通过滑动滑块来改变动态排序图的年份。滑块的回调函数是on_slider_change,每当滑块值发生变化时都会调用该函数,更新图表。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python利用pynimate实现制作动态排序图 - Python技术站

(0)
上一篇 2023年6月6日
下一篇 2023年6月6日

相关文章

  • python爬虫基础知识点整理

    以下是“Python爬虫基础知识点整理”的完整攻略: 一、Python爬虫基础知识点 1.1 爬虫的定义 爬虫是一种自动化程序,可以模拟人类在互联网上的行为,从网页中提取数据并保存到本地或数据库中。 1.2 爬虫的基本流程 爬虫的基本流程如下: 发送HTTP请求,获取网页内容。 解析网页内容,提取需要的数据。 保存数据到本地或数据库中。 1.3 爬虫的工具 …

    python 2023年5月14日
    00
  • python的函数形参和返回值你了解吗

    Python的函数是一种可重用的代码块,用于执行特定的任务,例如计算或打印输出。 函数包含输入参数(即形参)和输出(即返回值)。形参是函数定义中声明的参数,用于在调用函数时传递给函数的值。返回值是函数中执行的结果或计算,用于在调用函数后返回给调用方。 形参的使用可以让函数更加灵活和通用,而函数返回值则可以将计算结果或执行的工作返回给调用方,使得调用方可以对结…

    python 2023年5月14日
    00
  • 深入理解python中sort()与sorted()的区别

    深入理解python中sort()与sorted()的区别 在Python中,我们有两个方法可以对列表进行排序,分别是sort()和sorted()。虽然它们的作用是一样的,但它们之间还是有区别的,下面将进行详细讲解。 sort() sort()方法是一个列表对象的方法,调用它可以对列表进行原地排序(即不产生新的对象)。sort()方法有两个可选的参数,re…

    python 2023年5月14日
    00
  • 基python实现多线程网页爬虫

    以下是基于 Python 实现多线程网页爬虫的攻略,包含以下步骤: 确定爬取目标; 分析目标页面的网页结构,获取需要的数据; 使用多线程并发爬取数据; 存储数据。 下面详细介绍每个步骤的实现。 1. 确定爬取目标 首先需要确定要爬取的目标,这个目标可以是一个网站的全部页面,也可以是某个特定的页面或数据。 2. 分析目标页面的网页结构,获取需要的数据 网页结构…

    python 2023年5月18日
    00
  • python标准库压缩包模块zipfile和tarfile详解(常用标准库)

    Python标准库压缩包模块zipfile和tarfile详解 一、zipfile模块 zipfile模块是Python标准库中用于处理压缩文件的模块,它使用pkzip算法进行压缩。该模块提供了对zip格式的压缩文件进行读写的功能。 1.1 压缩文件操作 创建zip文件: import zipfile with zipfile.ZipFile(‘exampl…

    python 2023年6月3日
    00
  • pip报错“PermissionError: [Errno 13] Permission denied: ‘/usr/local/lib/python3.6/dist-packages/pip’”怎么处理?

    当使用 pip 安装 Python 包时,可能会遇到 “ImportError: No module named pip” 错误。这个错误通常是由于您的 Python 安装不完整或 pip 没有正确安装导致的。以下是详细讲解 pip 报错 “ImportError: No module named pip” 的原因与解决办法,包含两条实例说明: 原因 “Im…

    python 2023年5月4日
    00
  • Python中常用的8种字符串操作方法

    下面我来详细讲解Python中常用的8种字符串操作方法。 一、字符串的基本操作 1.1 字符串的创建 使用单引号或双引号创建字符串,例如: a = ‘hello’ b = "world" 1.2 字符串的拼接 可以使用加号( + )来实现字符串的拼接,例如: c = a + b print(c) # 输出: helloworld 1.3 …

    python 2023年5月13日
    00
  • python爬取网页转换为PDF文件

    在Python中,可以使用pdfkit和wkhtmltopdf库将网页转换为PDF文件。以下是Python爬取网页转换为PDF文件的详细攻略: 安装pdfkit和wkhtmltopdf 要使用pdfkit和wkhtmltopdf,需要先安装这两个库。可以使用pip安装pdfkit库。以下是安装pdfkit和wkhtmltopdf的示例: pip instal…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部