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 相关文章推荐
浅谈Django自定义模板标签template_tags的用处
Dec 20 Python
浅谈Python爬虫基本套路
Mar 25 Python
Python3.5 Json与pickle实现数据序列化与反序列化操作示例
Apr 29 Python
python飞机大战pygame游戏框架搭建操作详解
Dec 17 Python
Pytorch 中retain_graph的用法详解
Jan 07 Python
使用python 计算百分位数实现数据分箱代码
Mar 03 Python
Python实现AI换脸功能
Apr 10 Python
Python日志处理模块logging用法解析
May 19 Python
PyCharm vs VSCode,作为python开发者,你更倾向哪种IDE呢?
Aug 17 Python
python判断元素是否存在的实例方法
Sep 24 Python
MATLAB 如何求取离散点的曲率最大值
Apr 16 Python
python机器学习Github已达8.9Kstars模型解释器LIME
Nov 23 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
应用开发中涉及到的css和php笔记分享
2011/08/02 PHP
php 利用array_slice函数获取随机数组或前几条数据
2015/09/30 PHP
php数值计算num类简单操作示例
2020/05/15 PHP
Nigma vs Alliance BO5 第二场2.14
2021/03/10 DOTA
JQuery 学习笔记 选择器之三
2009/07/23 Javascript
用js判断页面刷新或关闭的方法(onbeforeunload与onunload事件)
2012/06/22 Javascript
jQuery中验证表单提交方式及序列化表单内容的实现
2014/01/06 Javascript
javascript实现类似百度分享功能的方法
2015/07/27 Javascript
整理关于Bootstrap模态弹出框的慕课笔记
2017/03/29 Javascript
vue 多入口文件搭建 vue多页面搭建的实例讲解
2018/03/12 Javascript
jQuery实现的回车触发按钮事件功能示例
2018/03/25 jQuery
解决layui下拉框监听问题(监听不到值的变化)
2019/09/28 Javascript
vue递归获取父元素的元素实例
2020/08/07 Javascript
Python输出PowerPoint(ppt)文件中全部文字信息的方法
2015/04/28 Python
解析Python中的二进制位运算符
2015/05/13 Python
使用Python对MySQL数据操作
2017/04/06 Python
Python内置函数 next的具体使用方法
2017/11/24 Python
Python爬虫实现百度图片自动下载
2018/02/04 Python
Flask之flask-script模块使用
2018/07/26 Python
Python实现带参数的用户验证功能装饰器示例
2018/12/14 Python
Python小进度条显示代码
2019/03/05 Python
Python 添加文件注释和函数注释操作
2020/08/09 Python
Python rabbitMQ如何实现生产消费者模式
2020/08/24 Python
五分钟带你搞懂python 迭代器与生成器
2020/08/30 Python
澳大利亚体育和露营装备在线/实体零售商:Find Sports
2020/06/03 全球购物
创建索引时需要注意的事项
2013/05/13 面试题
AJax面试题
2014/11/25 面试题
应届生新闻编辑求职信
2013/11/19 职场文书
应用数学专业求职信
2014/03/14 职场文书
责任心演讲稿
2014/05/14 职场文书
2014年卫生保健工作总结
2014/12/08 职场文书
2015年推广普通话演讲稿
2015/03/20 职场文书
聘任通知书
2015/09/21 职场文书
vue数据字典取键值项目的字典问题
2022/04/12 Vue.js
pandas中pd.groupby()的用法详解
2022/06/16 Python
浅谈音视频 pts dts基本概念及理解
2022/08/05 数码科技