Python实现Matplotlib,Seaborn动态数据图


Posted in Python onMay 06, 2022

Matplotlib

效果图如下

Python实现Matplotlib,Seaborn动态数据图

主要使用matplotlib.animation.FuncAnimation,上核心代码,

# 定义静态绘图函数
def draw_barchart(year):
    dff = df[df['year'].eq(year)].sort_values(by='value',
                                              ascending=True).tail(10)
    ax.clear()
    ax.barh(dff['name'],
            dff['value'],
            color=[colors[group_lk[x]] for x in dff['name']])
    dx = dff['value'].max() / 200
    for i, (value, name) in enumerate(zip(dff['value'], dff['name'])):
        ax.text(value - dx,
                i,
                name,
                size=14,
                weight=600,
                ha='right',
                va='bottom')
        ax.text(value - dx,
                i - .25,
                group_lk[name],
                size=10,
                color='#444444',
                ha='right',
                va='baseline')
        ax.text(value + dx,
                i,
                f'{value:,.0f}',
                size=14,
                ha='left',
                va='center')
    # 注释文本
    ax.text(1,
            0.4,
            year,
            transform=ax.transAxes,
            color='#777777',
            size=46,
            ha='right',
            weight=800)
    ax.text(0,
            1.06,
            '单位 (每1000)',
            transform=ax.transAxes,
            size=12,
            color='#777777')
    ax.xaxis.set_major_formatter(ticker.StrMethodFormatter('{x:,.0f}'))
    ax.xaxis.set_ticks_position('top')
    ax.tick_params(axis='x', colors='#777777', labelsize=12)
    ax.set_yticks([])
    ax.margins(0, 0.01)
    ax.grid(which='major', axis='x', linestyle='-')
    ax.set_axisbelow(True)
    ax.text(0,
            1.12,
            '1500~2018年世界人口最多城市',
            transform=ax.transAxes,
            size=24,
            weight=600,
            ha='left')
    
    plt.box(False)


# 调用matplotlib.animation.FuncAnimation让静态图动起来
animator = animation.FuncAnimation(fig,
                                   draw_barchart,
                                   frames=range(1968, 2019))
# Jupyter Notebook里展示动图animation
HTML(animator.to_jshtml())

在绘图数据部分改自己的数据既可为所欲为的使用了~

Seaborn

效果图如下

Python实现Matplotlib,Seaborn动态数据图

代码

import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import seaborn as sns
import numpy as np
import palettable


def get_data(i=0):
    x, y = np.random.normal(loc=i, scale=3, size=(2, 260))
    return x, y
x, y = get_data()


g = sns.JointGrid(x=x, y=y, size=4)
g.fig.set_size_inches(10, 8)
lim = (-10, 10)


def prep_axes(g, xlim, ylim):
    g.ax_joint.clear()
    g.ax_joint.set_xlim(xlim)
    g.ax_joint.set_ylim(ylim)
    g.ax_marg_x.clear()
    g.ax_marg_x.set_xlim(xlim)
    g.ax_marg_y.clear()
    g.ax_marg_y.set_ylim(ylim)
    plt.setp(g.ax_marg_x.get_xticklabels(), visible=False)
    plt.setp(g.ax_marg_y.get_yticklabels(), visible=False)
    plt.setp(g.ax_marg_x.yaxis.get_majorticklines(), visible=False)
    plt.setp(g.ax_marg_x.yaxis.get_minorticklines(), visible=False)
    plt.setp(g.ax_marg_y.xaxis.get_majorticklines(), visible=False)
    plt.setp(g.ax_marg_y.xaxis.get_minorticklines(), visible=False)
    plt.setp(g.ax_marg_x.get_yticklabels(), visible=False)
    plt.setp(g.ax_marg_y.get_xticklabels(), visible=False)


def animate(i):
    g.x, g.y = get_data(i)
    prep_axes(g, lim, lim)
    g.plot_joint(sns.kdeplot,
                 cmap='Paired')
    g.plot_marginals(sns.kdeplot, color='blue', shade=True)


frames = np.sin(np.linspace(0, 2 * np.pi, 17)) * 5
ani = matplotlib.animation.FuncAnimation(g.fig,
                                         animate,
                                         frames=frames,
                                         repeat=True)
HTML(ani.to_jshtml())

和Matplotlib代码类似,不过多解释。

到此这篇关于Python实现Matplotlib,Seaborn动态数据图的文章就介绍到这了!


Tags in this post...

Python 相关文章推荐
python计算书页码的统计数字问题实例
Sep 26 Python
Python中的fileinput模块的简单实用示例
Jul 09 Python
Python中Django框架利用url来控制登录的方法
Jul 25 Python
浅析Python中的getattr(),setattr(),delattr(),hasattr()
Jun 14 Python
Python的面向对象编程方式学习笔记
Jul 12 Python
Python单例模式实例详解
Mar 01 Python
Python最小二乘法矩阵
Jan 02 Python
python批量图片处理简单示例
Aug 06 Python
Django admin.py 在修改/添加表单界面显示额外字段的方法
Aug 22 Python
python连接PostgreSQL数据库的过程详解
Sep 18 Python
一些让Python代码简洁的实用技巧总结
Aug 23 Python
python 判断字符串当中是否包含字符(str.contain)
Jun 01 Python
PYTHON InceptionV3模型的复现详解
代码复现python目标检测yolo3详解预测
讲解Python实例练习逆序输出字符串
May 06 #Python
python turtle绘图
May 04 #Python
python blinker 信号库
May 04 #Python
python三子棋游戏
May 04 #Python
python神经网络 使用Keras构建RNN训练
May 04 #Python
You might like
PHP Document 代码注释规范
2009/04/13 PHP
php随机显示图片的简单示例
2014/02/15 PHP
Joomla开启SEF的方法
2016/05/04 PHP
PHP设计模式之原型模式定义与用法详解
2018/04/03 PHP
JavaScript 异步调用框架 (Part 6 - 实例 & 模式)
2009/08/04 Javascript
Ext对基本类型的扩展 ext,extjs,format
2010/12/25 Javascript
js关闭模态窗口刷新父页面或跳转页面
2012/12/13 Javascript
jQuery点击tr实现checkbox选中的方法
2013/03/19 Javascript
javascript常见用法总结
2014/05/22 Javascript
jquery实现的动态回到顶部特效代码
2015/10/28 Javascript
值得学习的bootstrap fileinput文件上传工具
2016/11/08 Javascript
JavaScript利用闭包实现模块化
2017/01/13 Javascript
JavaScript高阶函数_动力节点Java学院整理
2017/06/28 Javascript
JS实现分页浏览横向图片(类轮播)实例代码
2017/11/06 Javascript
vue.js项目中实用的小技巧汇总
2017/11/29 Javascript
vue-cli3.0配置及使用注意事项详解
2018/09/05 Javascript
前端vue-cli项目中使用img图片和background背景图的几种方法
2019/11/13 Javascript
js实现数字滚动特效
2019/12/16 Javascript
vue开发简单上传图片功能
2020/06/30 Javascript
Python实现图片尺寸缩放脚本
2018/03/10 Python
wx.CheckBox创建复选框控件并响应鼠标点击事件
2018/04/25 Python
Django基础知识与基本应用入门教程
2018/07/20 Python
python获取微信小程序手机号并绑定遇到的坑
2018/11/19 Python
在python中使用xlrd获取合并单元格的方法
2018/12/26 Python
对python中矩阵相加函数sum()的使用详解
2019/01/28 Python
浅谈python3打包与拆包在函数的应用详解
2020/05/02 Python
Python StringIO及BytesIO包使用方法解析
2020/06/15 Python
解释一下抽象方法和抽象类
2016/08/27 面试题
JAVA的事件委托机制和垃圾回收机制
2014/09/07 面试题
应届毕业生应聘自荐信
2013/12/07 职场文书
初中化学教学反思
2014/01/23 职场文书
致裁判员加油稿
2014/02/08 职场文书
幼儿园教学随笔感言
2014/02/23 职场文书
教师四风问题对照检查材料
2014/09/26 职场文书
运动会观后感
2015/06/09 职场文书
使用vue-element-admin框架从后端动态获取菜单功能的实现
2021/04/29 Vue.js