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的pyxmpp2中的主循环使其提高性能
Apr 24 Python
python相似模块用例
Mar 04 Python
scrapy spider的几种爬取方式实例代码
Jan 25 Python
python利用socketserver实现并发套接字功能
Jan 26 Python
Opencv+Python 色彩通道拆分及合并的示例
Dec 08 Python
Python学习笔记之列表推导式实例分析
Aug 13 Python
基于Python的图像数据增强Data Augmentation解析
Aug 13 Python
Python IDE环境之 新版Pycharm安装详细教程
Mar 05 Python
使用Python实现将多表分批次从数据库导出到Excel
May 15 Python
Python Dataframe常见索引方式详解
May 27 Python
Python定义一个Actor任务
Jul 29 Python
python中的sys模块和os模块
Mar 20 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.MVC的模板标签系统(四)
2006/09/05 PHP
PHP对MongoDB[NoSQL]数据库的操作
2013/03/01 PHP
CodeIgniter中使用cookie的三种方式详解
2014/07/18 PHP
PHP使用gmdate实现将一个UNIX 时间格式化成GMT文本的方法
2015/03/19 PHP
PHP获取毫秒级时间戳的方法
2015/04/15 PHP
php实现支持中文的文件下载功能示例
2017/08/30 PHP
PHP实现的MD5结合RSA签名算法实例
2017/10/07 PHP
基于jquery的web页面日期格式化插件
2011/11/15 Javascript
Javascript this 关键字 详解
2014/10/22 Javascript
js判断某个方法是否存在实例代码
2015/01/10 Javascript
探寻JavaScript中this指针指向
2016/04/23 Javascript
两种简单的跨域方法(jsonp、php)
2017/01/02 Javascript
JS实现iframe自适应高度的方法示例
2017/01/07 Javascript
不到200行 JavaScript 代码实现富文本编辑器的方法
2018/01/03 Javascript
JavaScript基础心法 深浅拷贝(浅拷贝和深拷贝)
2018/03/05 Javascript
jQuery+Cookie实现切换皮肤功能【附源码下载】
2018/03/25 jQuery
详解js跨域请求的两种方式,支持post请求
2018/05/05 Javascript
在Webpack中用url-loader处理图片和字体的问题
2020/04/28 Javascript
使用Python的Tornado框架实现一个一对一聊天的程序
2015/04/25 Python
Win7下Python与Tensorflow-CPU版开发环境的安装与配置过程
2018/01/04 Python
快速了解python leveldb
2018/01/18 Python
python处理数据,存进hive表的方法
2018/07/04 Python
Python操作SQLite/MySQL/LMDB数据库的方法
2019/11/07 Python
keras topN显示,自编写代码案例
2020/07/03 Python
Python爬虫实例之2021猫眼票房字体加密反爬策略(粗略版)
2021/02/22 Python
奥地利度假券的专家:we-are.travel
2019/04/10 全球购物
你常见到的runtime exception
2016/09/05 面试题
什么是三层交换,说说和路由的区别在那里
2014/09/01 面试题
师范生自荐信
2013/10/27 职场文书
军校制空专业毕业生自我鉴定
2013/11/16 职场文书
求职信怎么写范文
2014/05/26 职场文书
预备党员个人总结
2015/02/14 职场文书
公司慰问信范文
2015/03/23 职场文书
2015年艾滋病防治工作总结
2015/05/22 职场文书
朋友圈早安励志语录!
2019/07/08 职场文书
Python控制台输出俄罗斯方块移动和旋转功能
2021/04/18 Python