前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用ggside添加边际图形

使用ggside添加边际图形

作者头像
医学和生信笔记
发布2022-11-14 17:32:25
4880
发布2022-11-14 17:32:25
举报
文章被收录于专栏:医学和生信笔记

Stay hungry, stay foolish!

ggside有点类似于ggExtra,是用来添加边际图形的,但是比ggExtra更加灵活。可以添加非常多的类型,在语法上也更加靠近ggplot2的写法。

aplot有时候可以做到,但是专门的事还是要给专门的包做!

“包治百病!

安装

代码语言:javascript
复制
#CRAN
install.packages("ggside")
#Github
devtools::install_github("jtlandis/ggside")

基础使用

使用起来也是通过添加图层的方式。通过新提供的多种geom_xsidexxx()/geom_ysidexxx(),可以实现在x轴或者y轴添加各种不同的图形!

看下面这个例子,使用mpg数据集进行演示,先画一个散点图,横坐标是displ,纵坐标是hwy,都是连续型变量,通过class(离散型变量)映射不同的颜色。

代码语言:javascript
复制
library(ggside)
## 载入需要的程辑包:ggplot2
## Registered S3 method overwritten by 'ggside':
##   method from   
##   +.gg   ggplot2

p <- ggplot(mpg, aes(displ, hwy, colour = class)) + 
  geom_point(size = 2) +
  theme_bw()

p

plot of chunk unnamed-chunk-2

现在我们想在散点图的上方添加一个箱线图,用以显示不同classdispl的分布情况;在散点图的左侧添加密度图,用来显示hwy这一个变量的分布。

ggExtra做不到,因为添加的边际图形两边都是一样的。aplot是可以做到的,但是有时候因为数据问题会出现显示不全。

代码语言:javascript
复制
p + ggside(y.pos = "left")+ # 指定边际图形的位置
  geom_xsideboxplot(aes(y=class),orientation = "y")+ # orientation表示方向是水平还是垂直
  scale_xsidey_discrete()+
  geom_ysidedensity(aes(x = after_stat(density)), position = "stack")+
  theme(ggside.panel.scale = 0.3) # 调整边际图形的高度或宽度

plot of chunk unnamed-chunk-3

可以看到,上面这个图完美满足我们的需求。

下面有几个需要解释的地方。

首先是geom_xsideboxplot(aes(y=class),orientation = "y"),其中我们重新指定了y=class,因为最开始的图中,我们的横轴是displ,纵轴是hwy,现在我们要展示calss这个分类变量了,横坐标还是一样的,纵坐标需要换掉!

接下来的scale_xsidey_discrete(),因为重新指定了y轴的映射,所以强制变为离散型,这样才不会和最开始的连续性映射冲突。

以上就是ggside的基础用法。接下来看看其他用法。

进阶

目前支持非常多geom

  • GeomBar
  • GeomBoxplot
  • GeomDensity
  • GeomFreqpoly
  • GeomHistogram
  • GeomLine
  • GeomPath
  • GeomPoint
  • GeomText
  • GeomTile
  • GeomViolin

同时也支持分面操作哦!

代码语言:javascript
复制
library(dplyr)
## 
## 载入程辑包:'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union

i2 <- iris %>%
  mutate(Species2 = rep(c("A","B"), 75))

p <- ggplot(i2, aes(Sepal.Width, Sepal.Length, color = Species)) +
  geom_point()+
  geom_xsidedensity(aes(y=stat(density))) +
  geom_ysidedensity(aes(x=stat(density))) +
  theme_bw()

p

plot of chunk unnamed-chunk-4

分面操作:

代码语言:javascript
复制
p +  facet_wrap(Species~Species2) +
  labs(title = "FacetWrap") +
  guides(guide_axis(check.overlap = T))

plot of chunk unnamed-chunk-5

当然facet_grid()也是支持的。

代码语言:javascript
复制
p + facet_grid(Species~Species2, space = "free", scale = "free_y") 

plot of chunk unnamed-chunk-6

OK,以上就是ggside的基本用法,你们学废了吗?

以上就是今天的内容,希望对你有帮助哦!欢迎点赞、在看、关注、转发

欢迎在评论区留言或直接添加我的微信!

End

欢迎关注公众号:医学和生信笔记

医学和生信笔记 公众号主要分享:1.医学小知识、肛肠科小知识;2.R语言和Python相关的数据分析、可视化、机器学习等;3.生物信息学学习资料和自己的学习笔记!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-06-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 医学和生信笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装
  • 基础使用
  • 进阶
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档