Python可视化必备,在Matplotlib/Seaborn中轻松玩转图形拼接!

news2024/10/7 12:23:05

数据展示时,在同一页面上混合排版多个图形是一种常见的用法。

本次分享一个Python轮子patchworklib:

  • 通过|、/轻松实现图形排列;
  • 比matplotlib、seaborn等自带子图功能更加灵活;
  • 灵感源于R中的patchwork。

目录

在Matplotlib中使用patchworklib拼图

在Seaborn中使用patchworklib拼图 (Axes水平)

在Seaborn中使用patchworklib拼图 (Figure水平)

在plotnine中使用patchworklib拼图


在Matplotlib中使用patchworklib拼图

主要使用pw.Brick方法和savefig方法。

import patchworklib as pw
import matplotlib.pyplot as plt
plt.style.use('ggplot')

#绘制子图1
ax1 = pw.Brick(figsize=(1, 2))  #每个子图调用pw.Brick方法
ax1.bar([1, 2], [1, 2])
ax1.set_title("ax1")

#绘制子图2
ax2 = pw.Brick(figsize=(1, 3))
ax2.scatter(range(5), range(5))
ax2.set_title("ax2")

#绘制子图3
ax3 = pw.Brick(figsize=(2, 1))
ax3.bar([2, 1], [2, 3])
ax3.set_title("ax3")

#绘制子图4
ax4 = pw.Brick(figsize=(2, 2))
ax4.scatter(range(5), range(5))
ax4.set_title("ax4")

#拼图
ax1234 = (ax1 | ax2) | (ax3 / ax4)
ax1234.savefig()  #类似plt.show()


在Seaborn中使用patchworklib拼图 (Axes水平)

和前面Matplotlib中一样,主要使用pw.Brick方法和savefig方法。

关于Axes水平和Figure水平差异,请参考👉Matplotlib太臃肿,试试Seaborn

import pandas as pd
import seaborn as sns
import patchworklib as pw

#ax1
ax1 = pw.Brick(figsize=(3,2)) #每个子图调用pw.Brick方法
fmri = sns.load_dataset("fmri")
sns.lineplot(x="timepoint", y="signal", hue="region", style="event", data=fmri, ax=ax1)
ax1.move_legend(new_loc='upper left', bbox_to_anchor=(1.05, 1.0))
ax1.set_title("ax1")

#ax2
ax2 = pw.Brick(figsize=(1,2))
titanic = sns.load_dataset("titanic")
sns.barplot(x="sex", y="survived", hue="class", data=titanic, ax=ax2)
ax2.move_legend(new_loc='upper left', bbox_to_anchor=(1.05, 1.0))
ax2.set_title("ax2")

#ax3
ax3 = pw.Brick(figsize=(5,2))
diamonds = sns.load_dataset("diamonds")
sns.histplot(diamonds, x="price", hue="cut", multiple="stack", palette="light:m_r", edgecolor=".3", linewidth=.5, log_scale=True, ax = ax3)
ax3.move_legend(new_loc='upper left', bbox_to_anchor=(1.0, 1.0))
ax3.set_title("ax3")

#ax4
ax4 = pw.Brick(figsize=(6,2))
tips = sns.load_dataset("tips")
sns.violinplot(data=tips, x="day", y="total_bill", hue="smoker",split=True, inner="quart", linewidth=1, palette={"Yes": "b", "No": ".85"}, ax=ax4)
ax4.move_legend("upper left", bbox_to_anchor=(1.02, 1.0))
ax4.set_title("ax4")

#ax5
ax5    = pw.Brick(figsize=(5,2))
rs     = np.random.RandomState(365)
values = rs.randn(365, 4).cumsum(axis=0)
dates  = pd.date_range("1 1 2016", periods=365, freq="D")
data   = pd.DataFrame(values, dates, columns=["A", "B", "C", "D"])
data = data.rolling(7).mean()
sns.lineplot(data=data, palette="tab10", linewidth=2.5, ax=ax5)
ax5.set_xlabel("date")
ax5.set_ylabel("value")
ax5.move_legend("upper left", bbox_to_anchor=(1.02, 1.0))
ax5.set_title("ax5")

#拼图
ax12345 = (ax1|ax2)/(ax3/ax4)/(ax5)
ax12345.savefig()


在Seaborn中使用patchworklib拼图 (Figure水平)

此处主要使用load_seabrongrid方法和pw.overwrite_axisgrid()方法。

import matplotlib
import seaborn as sns
import patchworklib as pw 

pw.overwrite_axisgrid() # 使用pw.load_seagorngrid,必须先开启pw.overwrite_axisgrid方法 

iris = sns.load_dataset("iris")
tips = sns.load_dataset("tips")

# An lmplot
g0 = sns.lmplot(x="total_bill", y="tip", hue="smoker", data=tips, 
                palette=dict(Yes="g", No="m"))
g0 = pw.load_seaborngrid(g0, label="g0") #每个子图使用使用pw.load_seagorngrid方法

# A Pairplot
g1 = sns.pairplot(iris, hue="species")
g1 = pw.load_seaborngrid(g1, label="g1", figsize=(6,6))

# A relplot
g2 = sns.relplot(data=tips, x="total_bill", y="tip", col="time", hue="time", 
                 size="size", style="sex", palette=["b", "r"], sizes=(10, 100))
g2.set_titles("")
g2 = pw.load_seaborngrid(g2, label="g2")

# A JointGrid
g3 = sns.jointplot(x="sepal_width", y="petal_length", data=iris,hue="species",
                   kind="kde", space=0, color="g")

g3 = pw.load_seaborngrid(g3, label="g3", labels=["joint","marg_x","marg_y"])

#个性化设置
g0.case.set_title('A', x=0, y=1.0, loc="right")
g0.move_legend("upper left", bbox_to_anchor=(0.1,1.0))
g1.case.set_title('B', x=0, y=1.0, loc="right")
g3.case.set_title('C', x=0, y=1.0, loc="right")
g2.case.set_title('D', x=0, y=1.0, loc="right")

#拼图
(((g0/g3)["g0"]|g1)["g1"]/g2).savefig()


在plotnine中使用patchworklib拼图

此处主要使用pw.load_ggplot方法。

关于plotnine👉plotnine!!!终于可以在Python中使用ggplot2

import patchworklib as pw 
from plotnine import * 
from plotnine.data import *  

g1 = (ggplot(mtcars) + geom_point(aes("mpg", "disp"))) 
g1 = pw.load_ggplot(g1, figsize=(2,3)) #每个子图重复使用pw.load_ggplot方法

g2 = (ggplot(mtcars) + geom_boxplot(aes("gear", "disp", group="gear"))) 
g2 = pw.load_ggplot(g2, figsize=(2,3))

g3 = (ggplot(mtcars, aes('wt', 'mpg', color='factor(gear)')) + geom_point() + stat_smooth(method='lm') + facet_wrap('~gear')) 
g3 = pw.load_ggplot(g3, figsize=(3,3))

g4 = (ggplot(data=diamonds) + geom_bar(mapping=aes(x="cut", fill="clarity"), position="dodge"))  
g4 = pw.load_ggplot(g4, figsize=(5,2))

#拼图
g1234 = (g1|g2|g3)/g4 
g1234.savefig()

感觉不错,求个赞~~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/13891.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java学习笔记】第四章 面向对象编程三部曲(中)

【Java学习笔记】第四章 面向对象编程三部曲(上) 【Java学习笔记】第四章 面向对象编程三部曲(中) 【Java学习笔记】第四章 面向对象编程三部曲(下) 文章目录5. 面向对象编程(中)5…

gdb调试 入门

程序的调试过程主要有:单步执行,跳入函数,跳出函数,设置断点,设置观察点,查看变量。 You can run "gdb" with no arguments or options; but the most usualway to start GDB is with one argume…

ANDROID ROOT FIDDLER HTTPS 抓包

参考 adb 修改手机代理方式_userwyh的博客-CSDN博客_adb shell settings put global http_proxy 手机模拟器安装证书并抓包_虚无-缥缈的博客-CSDN博客_模拟器安装证书 安卓手机使用adb添加系统证书方法 - 知乎 设置设备代理(需要ROOT 设置代理: adb…

【重新安装Anaconda心得】

文章目录(一)环境变量设置(二)Anaconda添加镜像源【可以使用境外流量不用添加】(三)创建虚拟环境的细节(四)补充:conda的常用命令(一)环境变量设置…

算法篇------贪心1

文章目录贪心的概念题目1------经典的选择排序(简单)题目2----平衡字符串(简单)题目3---买卖股票的最佳时间(中等)题目4------跳跃游戏(中等)题目5-------钱币找零题目6------多机调度的问题贪心的概念 什么是贪心算法&#xff1…

ATF源码篇(九):docs文件夹-Components组件(8)固件升级

固件更新(FWU) 本文档描述了TF-A中可用的各种固件更新(FWU)机制的设计。 1、PSA固件更新(PSA FWU)-平台安全架构2、TBBR固件更新(TBBR FWU)-可信板引导要求 PSA固件更新实施了同名…

[附源码]java毕业设计课程作业管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

vtk拾取器-vtkAbstractPicker/vtkCellPicker

创建了VTK社区,欢迎大家加入雪易社区-CSDN社区云 简介:此文主要介绍vtk中的拾取器的用法,若能为各位小伙伴解决一些困扰就更好了。非常欢迎各位小伙伴指正并补充。 1. vtkAbstractPicker vtkAbstractPicker是vtk拾取器的基类,为…

2022下半年《软考-系统架构设计师》备考经验分享

前言 我参加了2022年11月份的《软考-系统架构设计师》考试,在一个多月的备考之中我总结了一些学习经验和答题技巧,现毫无保留的分享给大家,希望对报考的同学们有所帮助。彩蛋:关注我的公众号【劼哥舍】,回复“软考”即…

dubbo:docker安装dubbo-admin

0.引言 我们在搭建dubbo框架时,需要安装一个dubbo-admin来管理服务已经配置文件,今天我们来看看如何通过docker快速搭建一个dobbo-admin 1. 安装 1、首先到dockerhub上搜索dubbo-admin的镜像源 2、可以看到两个引用较高的镜像源,第一个是a…

SpringCloud和SpringBoot在调Feign传文件时的异常汇总及解决办法

主要记录SpringCloud在调Feign传文件时的问题: 1.(按注意点2改正即可) Current request is not a multipart request(按注意点2改正即可) 2.(按注意点3处理即可) The field files exceeds it…

Pytorch框架基础

目录 1-02张量的简介与创建 pytorch中的Tensor 张量的创建 1-03张量的操作 1. 拼接 2.张量的拼接与切分 3.张量索引 4.张量变换 1-02张量的简介与创建 张量是一个 ,它是标量,向量,矩阵的高维拓展 pytorch中的Tensor 在pytorch中的属…

【C++】C++基础知识(七)---指针

C基础知识(七)1. 指针的定义与使用2. 指针的内存3. 空指针和野指针4. const修饰指针5. 指针与数组6. 指针与函数7. 指针用于数组和函数的案例1. 指针的定义与使用 指针的作用: ------通过指针可以直接的访问变量的内存,内存编号一…

企业在线培训场景下讲师+ppt课件直播应用效果

阿酷TONY / 原创 / 2022-11-17 / 长沙 企业在线培训场景下讲师ppt课件直播应用效果 : 图 / 直播示意图 设备需求: 1. 现场布摄像头,用于采集讲师摄像头视频和音频数据; 2. PC电脑或笔记本电脑一台( 安装直播客户端&…

学会Python开发的第一步:写一个桌面小程序

前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 又到了学Python时刻~ 当使用桌面应用程序的时候,有没有那么一瞬间, 想学习一下桌面应用程序开发? 建议此次课程大家稍作了解不要浪费太多时间, 因为没有哪家公司会招聘…

科普系列:AUTOSAR与OSEK网络管理比较(下)

在上篇中我们分别在状态机和报文格式方面对OSEK和AUTOSAR网络管理进行了简单介绍,感兴趣的小伙伴请移步至文章《科普系列:AUTOSAR与OSEK网络管理比较(上)》。 三、OSEK与AUTOSAR网络管理特点对比 本篇就是本文的重点了&#xff…

华为机试 - 区间交集

目录 题目描述 输入描述 输出描述 用例 题目解析 算法源码 题目描述 给定一组闭区间,其中部分区间存在交集。 任意两个给定区间的交集,称为公共区间(如:[1,2],[2,3]的公共区间为[2,2],[3,5],[3,6]的公共区间为[3,5])。 公共区间之间…

Springboot普通类获取运行时环境,获取运行时容器,获取Bean,等等获取运行时一切参数总结大全

文章目录获取ApplicationContextApplicationContext有什么用获取ApplicationContext使用ApplicationContext获取EnvironmentEnvironment有什么用获取Environment使用Environment获取ApplicationContext ApplicationContext有什么用 ApplicationContext为应用程序提供配置的中…

供应点击化学PEG试剂Azide-PEG-Rhodamine B,叠氮聚乙二醇罗丹明

点击化学PEG试剂——叠氮-聚乙二醇-罗丹明,化学试剂其英文名为Azide-PEG-Rhodamine B,N3-PEG-RB,它所属分类为Azide PEG Fluorescent PEG。 peg试剂的分子量均可定制,有:5000、2000、1000、3400、10000、20000 。该试…

java计算机毕业设计ssm气象百事通系统-天气预报系统

项目介绍 本气象百事通系统是针对目前仓库的实际需求,从实际工作出发,对过去的天气系统存在的问题进行分析,完善用户的使用体会。采用计算机系统来管理信息,取代人工管理模式,查询便利,信息准确率高,节省了开支,提高了工作的效率。 本系统结合计算机系统的结构、概念、模型、原…