边缘密度分布图 | ggExtra包/aplot拼图/ggpubr包 等的实现方法

概述:aplot 拼图效果好

根据网友探索[1],总结如下:

  • ggExtra 包的拼图间隙有点大,图例在主图和边缘图之间,除非去掉图例,否则没法看。
  • aplot包的默认拼图间隙很小,比较美观,图例在外面。
  • gridExtra包默认拼图之间的间隙比较大。
  • 另外仔细比较aplot包和gridExtra包的拼图结果,可以发现aplot包是把子图的panel区域对齐,而gridExtra包是把子图的plot区域对齐。
  • 结论:aplot包的对齐效果显然是我们需要的。

1. ggExtra 画边缘密度图

# 1. get data
set.seed(2024)
dat=diamonds[sample(1:nrow(diamonds), 1000),]
library(ggplot2)
# 2. base plot
# with legend
p1=ggplot(dat, aes(carat, price, color=clarity))+
  geom_point()+
  theme_classic()+
  theme(
    panel.border = element_rect(size = 1, colour = "black", fill="#00112200")
  ); p1
# no legend
p2=ggplot(dat, aes(carat, price, color=clarity))+
  geom_point(show.legend = F)+
  theme_classic()+
  theme(
    panel.border = element_rect(size = 1, colour = "black", fill="#00112200")
  ); p2

# 3.margin density
library(ggExtra)
ggExtra::ggMarginal(p1+ggtitle("p1-A"), type = "density")
ggMarginal(p1+ggtitle("p1-B"), colour = "red")

# no legend
ggMarginal(p2+ggtitle("p2-A"), groupColour = TRUE)
ggMarginal(p2+ggtitle("p2-B"),type = "density",groupColour = TRUE,groupFill = TRUE)
ggMarginal(p2+ggtitle("p2-C"),  
           xparams=list( fill = c("deeppink")),
           yparams=list( fill = c("navy")),
           color=NA)

在这里插入图片描述

2. ggplot2绘图+aplot拼图

library(RColorBrewer)
len=length( unique(dat$clarity) ); len #8

# upper density
top_panel <- ggplot()+
  geom_density(data = dat,
               mapping=aes(carat, fill=clarity, color=clarity),
               alpha=0.5)+
  scale_fill_manual(values = brewer.pal(len,'Set2'))+ #设置填充颜色
  scale_color_manual(values = brewer.pal(len,'Set2'))+ # 设置线的颜色
  theme_void()+ # 设置主题
  theme(legend.position="none") # 去除图例
top_panel

# 右侧密度分布图
right_panel <- ggplot()+
  geom_density(data=dat,
               aes(price, fill=clarity,color=clarity),
               alpha=0.5)+
  scale_fill_manual(values = brewer.pal(len,'Set2'))+ #设置填充颜色
  scale_color_manual(values = brewer.pal(len,'Set2'))+ # 设置线的颜色
  theme_void()+ # 设置主题
  coord_flip()+ # 翻转坐标轴
  theme(legend.position="none")# 去除图例
right_panel

# aplot 包拼图
library(aplot)

# no legend
p2 %>% insert_right(right_panel, width=.4) %>% insert_top(top_panel, height=0.2)  

# with legend
p1 %>% insert_right(right_panel, width=.4) %>% insert_top(top_panel, height=0.2)  

#ggsave('plot2.pdf',width = 6,height = 5)

在这里插入图片描述

3. ggpubr 包绘制边缘密度分布图

# fig1
library(ggpubr)
gp1<-ggscatterhist(
  iris, x = "Sepal.Length", y = "Sepal.Width",
  color = "Species", size = 3, alpha = 0.6)
gp1
# 不支持theme()
# gp1+theme(panel.background = element_rect(fill="#00112200", color="black"))


# fig2
set.seed(2024)
dat=diamonds[sample(1:nrow(diamonds), 1000),]

ggscatterhist(
  dat, x = "carat", y = "price",
  color = "clarity", size = 2, alpha = 0.6)

# fig3
ggscatterhist(
  dat, x = "carat", y = "price",
  color = "clarity", size = 3, alpha = 0.6,
  #palette = c("#00AFBB", "#E7B800", "#FC4E07"),
  margin.params = list(fill = "clarity", color = "black", size = 0.2)
)


# Fig4:指定主图黑边框(略)
ggscatterhist(
  dat, x = "carat", y = "price",
  color = "clarity", size = 3, alpha = 0.6,
  #palette = c("#00AFBB", "#E7B800", "#FC4E07"),
  margin.params = list(fill = "clarity", color = "black", size = 0.2),
  ggtheme = theme_classic() + #指定周围边框
    theme(panel.background = element_rect(fill="#00112200", color="black"))
)

在这里插入图片描述

Ref

  • [1] 分组p值箱线图 https://blog.csdn.net/weixin_46587777/article/details/138032368
  • [2] https://cran.r-project.org/web/packages/ggExtra/ggExtra.pdf
  • [3] https://cran.r-project.org/web/packages/ggExtra/vignettes/ggExtra.html

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java——二进制原码、反码和补码

一、简要介绍 原码、反码和补码只是三种二进制不同的表示形式&#xff0c;每个二进制数都有这三个形式。 1、原码 原码是将一个数的符号位和数值位分别表示的方法。 最高位为符号位&#xff0c;0表示正&#xff0c;1表示负&#xff0c;其余位表示数值的绝对值。 例如&…

生成式AI,在云端的绽放与盛开

编辑&#xff1a;阿冒 设计&#xff1a;沐由 毫无疑问&#xff0c;生成式AI已然成为当今技术发展和应用创新的重要引擎之一。 过去的一年多时间里&#xff0c;我们每个人都在目睹和见证着生成式AI是如何以移山倒海的力量&#xff0c;为诸多行业带来革命性乃至颠覆性的变革&…

FS118M 单A口QC协议芯片

FS118M是一个QC快充协议芯片&#xff0c;FS118M可以识别插入的手机类型&#xff0c;选择最为合适的协议应对手机需要。USB Type-A 口的 D连接到FS118M芯片&#xff0c;当手机插入到 USB Type-A 口后&#xff0c;根据各个协议的约定&#xff0c;手机和FS118M之间将开始互相识别&…

计网ppt标黄知识点整理第(2)章节——谢希仁版本、期末复习自用

物理层考虑的是怎样才能在连接各种计算机的传输媒体上传输数据比特流&#xff0c;而不是指具体的传输媒体。4 个特性&#xff1a; 机械特性&#xff1a;指明接口所用接线器的形状和尺寸、引线数目和排列、固定和锁定装置等。 电气特性&#xff1a;指明在接口电缆的各条线上出现…

C/C++开发,2024.x CLion安装,亲测有效

CLion 是一款专为 C 和 C 开发者设计的跨平台集成开发环境&#xff08;IDE&#xff09;&#xff0c;提供了智能代码补全、代码分析、调试和 Git 集成等功能&#xff0c;以提高开发效率和代码质量。 1.下载安装c/c开发工具 CLion 先去官网下载&#xff0c;我这里下载的是最新版…

【docker】docker的安装

如果之前安装了旧版本的docker我们需要进行卸载&#xff1a; 卸载之前的旧版本 卸载 # 卸载旧版本 sudo apt-get remove docker docker-engine docker.io containerd runc # 卸载历史版本 apt-get purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker…

问答机器人

怎样做自己的问答机器人&#xff1f; 根据我们提供的数据分析出问题的答案&#xff0c;我们并不需要训练自己的模型 微调模型 finetune&#xff0c;将语言模型调成另外的语言模型&#xff0c;更适合不同类型数据&#xff0c;运用finetune方法将模型变化 知识库模型 embedd…

word避免画质画质模糊方法

问题描述&#xff1a;   近期写文档时会高频率贴图&#xff0c;粘图过程中发现Word会自动压缩图片画质&#xff0c;而且压缩得很严重&#xff0c;下面是一幅图被压缩前后的画质对比 &#xff08;图片压缩前&#xff09; &#xff08;图片压缩后&#xff09; 解决方案&#x…

修改文档日期神器 - Python打造日期修改器

这篇文章将介绍一款使用 Python 开发的实用工具 - 日期修改器。它可以帮助您轻松修改 Word (.docx) 和 PDF 文档的日期信息&#xff0c;满足日常办公和文档整理的需求。 C:\pythoncode\new\modifyfiledate.py 软件功能 支持修改 Word (.docx) 日期信息。允许选择要修改的日期…

leetcode146.LRU缓存,从算法题引入,全面学习LRU和链表哈希表知识

leetcode146. LRU 缓存 题目链接 请你设计并实现一个满足 LRU (最近最少使用) 缓存约束的数据结构。 实现 LRUCache 类&#xff1a; LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存 int get(int key) 如果关键字 key 存在于缓存中&#xff0c;则返回关…

三种字符串的管理方式

NSString的三种实现方式 OC这个语言在不停的升级自己的内存管理&#xff0c;尽量的让自己的 OC的字符串 问题引入 在学习字符串的过程中间会遇到一个因为OC语言更新造成的问题 例如&#xff1a; int main(int argc, const char * argv[]) {autoreleasepool {NSString* str1 …

ZCU102启动镜像(详细版)

ZCU102启动镜像--详细版本 详细步骤1、安装好Vitis&#xff08;GUI界面&#xff09;、 Vivado、 Petalinux软件然后vivado这边的操作就先结束了 创建Petalinux工程编译镜像打包 详细步骤 B站参考视频链接: link 1、安装好Vitis&#xff08;GUI界面&#xff09;、 Vivado、 Pe…

SpringBoot:手动创建应用

Spring提供了在线的Spring Initialzr在线创建Spring Boot项目&#xff0c;为了更好的理解Spring Boot项目&#xff0c;这里我们选择手动创建。 1.新建Web应用 1.1 生成工程 首先要做是创建一个Java项目&#xff0c;这里我们选择使用Maven来支持&#xff0c;使用archetype:ge…

C++进阶之AVL树+模拟实现

目录 目录 一、AVL树的基本概念 1.1 基本概念 二、AVL树的模拟实现 2.1 AVL树节点的定义 2.2 插入操作 2.3 旋转操作 2.4 具体实现 一、AVL树的基本概念 1.1 基本概念 二叉搜索树虽可以缩短查找的效率&#xff0c;但如果数据有序或接近有序二叉搜索树将退化为单支树&…

【论文速读】Self-Rag框架,《Self-Rag: Self-reflective Retrieval augmented Generation》

关于前面的文章阅读《When to Retrieve: Teaching LLMs to Utilize Information Retrieval Effectively》&#xff0c;有网友问与Self-Rag有什么区别。 所以&#xff0c;大概看了一下Self-Rag这篇论文。 两篇文章的方法确实非常像&#xff0c;Self-Rag相对更加复杂一些。 When …

图数据库Neo4j——Neo4j简介、数据结构 Docker版本的部署安装 Cypher语句的入门

前言 MySQL是一种开源的关系型数据库管理系统&#xff0c;使用SQL作为其查询语言&#xff0c;常见的关系型数据库有MySQL、Oracle、SQL Server、PostgreSQL等。相关博客文章如下&#xff1a; 【合集】MySQL的入门进阶强化——从 普通人 到 超级赛亚人 的 华丽转身PostgreSQL数…

计算机系统结构之流水

一、标量流水线的主要性能 吞吐率是流水线单位时间里能流出的任务数或结果数(最大吞吐率&#xff1a;单位时间内计算机所能处理的最多指令条数)。 流水线中经过时间最长的子过程成为瓶颈子过程。最大吞吐率取决于瓶颈段的时间。 实际吞吐率&#xff1a; 加速比&#xff1a; …

教你搞一个比较简单的计时和进度条装饰器 (多线程进阶版)

简单的计时和进度条装饰器 - 多线程进阶版 这个进阶版有什么&#xff1f;话不多说上代码效果图 上一篇关于装饰器的Blog 这个进阶版有什么&#xff1f; 在上一个装饰器工作时&#xff0c;跑了20秒后就停止了。如果运行的函数跑了60秒&#xff0c;后面的40秒我们是只能等到结束…

CAD二次开发(7)- 实现Ribbon选项卡,面板,功能按钮的添加

1. 创建工程 2. 需要引入的依赖 如图&#xff0c;去掉依赖复制到本地 3. 代码实现 RibbonTool.cs 实现添加Ribbon选项卡&#xff0c;添加面板&#xff0c;以及给面板添加下拉组合按钮。 using Autodesk.Windows; using System; using System.Collections.Generic; using S…

悬剑武器库5.04版

工具介绍 悬剑5 基于“悬剑网盘”精选工具集悬剑5“飞廉”云武器库制作。 操作系统&#xff1a;Windows 10 专业版 锁屏密码&#xff1a;secquan.org 解压密码: 圈子社区secquan.org 镜像大小&#xff1a;33.1GB 系统占用空间63.0 GB 镜像导入 下载镜像&#xff0c;文末…