前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ggplot2画散点图拼接密度图

ggplot2画散点图拼接密度图

作者头像
用户7010445
发布2020-12-08 10:48:02
7850
发布2020-12-08 10:48:02
举报

公众号开始有广告收入了,所以决定开始接受大家投稿了,每篇稿费100元(后面随着公众号广告收入的增加稿费也会随着增加),文章产生的其收入也归作者所有,包括可能的赞赏文末广告的收入。每个月接受10篇稿件,任何和科研内容相关的都可以,包括但不限于实验方案技巧论文写作心得体会期刊选择投稿经验读研读博的感想随笔吐槽任何科研软件的使用技巧,等等等等。欢迎大家投稿呀!要求是内容达到500字以上(因为要申请原创),一定要是原创内容,不能抄袭。不能一稿多投。稿件可以是任何形式,markdown语法写成最好。大家感兴趣的可以留言加我微信

image.png

前几天有一个读者在公众号留言问上面这幅图应该如何实现,我想到一个办法是利用ggplot2分别画散点图和密度图,然后利用aplot包来拼图,aplot包是ggtree的作者新开发的一个包,非常重要的一个作用就是解决拼图的时候坐标轴对齐的问题。这个aplot包的用法大家可以在微信搜索里直接搜aplot就可以直接找到原作者写的推文的介绍,而且这个公众号经常推送R语言的学习内容,非常好,作者是真正的大神级别的人物了。

今天的内容主要参考了微信文章

aplot包:让你画出更复杂的图

好了下面就开始介绍具体的实现过程

首先是模拟数据

生成两列符合正态分布的数据,然后组合成一个数据框

代码语言:javascript
复制
x<-rnorm(500,0,1)
y<-rnorm(500,0,2)
df<-data.frame(x=x,y=y)
head(df)

先做一个简单的散点图

代码语言:javascript
复制
library(ggplot2)ggplot(df,aes(x=x,y=y))+  geom_point()

image.png

按照Y轴的范围填充三个颜色,比如大于3填充一个,小于-3填充另外一种,-3到3中间的填充另外一种

给数据添加一列新的用来映射颜色

代码语言:javascript
复制
df$color<-ifelse(df$y>3,"A",
                 ifelse(df$y<(-3),"B","D"))
head(df)

画图

代码语言:javascript
复制
ggplot(df,aes(x,y))+
  geom_point(aes(color=color))+
  scale_color_manual(values=c("green","blue","grey"))+
  theme_bw()

image.png

接下来是添加辅助线

代码语言:javascript
复制
ggplot(df,aes(x,y))+
  geom_point(aes(color=color))+
  scale_color_manual(values=c("green","blue","grey"))+
  theme_bw()+
  geom_hline(yintercept = -3,lty="dashed")+
  geom_hline(yintercept = 3,lty="dashed")+
  geom_vline(xintercept = -2,lty="dashed")

image.png

接下来是密度图
代码语言:javascript
复制
ggplot(df,aes(x))+
  geom_density(fill="grey",alpha=0.5)+
  scale_y_continuous(expand = c(0,0))+
  theme_minimal()+
  theme(axis.title = element_blank(),
        axis.text = element_blank(),
        axis.ticks = element_blank())

image.png

y轴的密度分布也是这样画,下面就不重复了

接下来是拼图
代码语言:javascript
复制
library(ggplot2)
library(aplot)
p1<-ggplot(df,aes(x,y))+
  geom_point(aes(color=color))+
  scale_color_manual(values=c("green","blue","grey"))+
  theme_bw()+
  geom_hline(yintercept = -3,lty="dashed")+
  geom_hline(yintercept = 3,lty="dashed")+
  geom_vline(xintercept = -2,lty="dashed")

p2<-ggplot(df,aes(x))+
  geom_density(fill="grey",alpha=0.5)+
  scale_y_continuous(expand = c(0,0))+
  theme_minimal()+
  theme(axis.title = element_blank(),
        axis.text = element_blank(),
        axis.ticks = element_blank())

p3<-ggplot(df,aes(y))+
  geom_density(fill="grey",alpha=0.5)+
  scale_y_continuous(expand = c(0,0))+
  theme_minimal()+
  theme(axis.title = element_blank(),
        axis.text = element_blank(),
        axis.ticks = element_blank())+
  coord_flip()
p1%>%
  insert_top(p2,height = 0.5)%>%
  insert_right(p3,0.5)

image.png

遇到的问题是:如何给密度图的右下角的一部分填充另外一个颜色,这个我暂时还不知道如何实现?大家如果知道如何实现欢迎留言呀!

欢迎大家关注我的公众号

小明的数据分析笔记本

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

本文分享自 小明的数据分析笔记本 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • aplot包:让你画出更复杂的图
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档