您好,登錄后才能下訂單哦!
ggplot2如何畫散點圖拼接密度圖,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
前幾天有一個讀者在公眾號留言問上面這幅圖應該如何實現,我想到一個辦法是利用ggplot2分別畫散點圖和密度圖,然后利用aplot包來拼圖,aplot包是ggtree的作者新開發的一個包,非常重要的一個作用就是解決拼圖的時候坐標軸對齊的問題。這個aplot包的用法大家可以在微信搜索里直接搜aplot就可以直接找到原作者寫的推文的介紹,而且這個公眾號經常推送R語言的學習內容,非常好,作者是真正的大神級別的人物了。
好了下面就開始介紹具體的實現過程
生成兩列符合正態分布的數據,然后組合成一個數據框
x<-rnorm(500,0,1)
y<-rnorm(500,0,2)
df<-data.frame(x=x,y=y)
head(df)
先做一個簡單的散點圖
library(ggplot2)ggplot(df,aes(x=x,y=y))+ geom_point()
按照Y軸的范圍填充三個顏色,比如大于3填充一個,小于-3填充另外一種,-3到3中間的填充另外一種
給數據添加一列新的用來映射顏色
df$color<-ifelse(df$y>3,"A",
ifelse(df$y<(-3),"B","D"))
head(df)
畫圖
ggplot(df,aes(x,y))+
geom_point(aes(color=color))+
scale_color_manual(values=c("green","blue","grey"))+
theme_bw()
接下來是添加輔助線
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")
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())
y軸的密度分布也是這樣畫,下面就不重復了
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)
看完上述內容,你們掌握ggplot2如何畫散點圖拼接密度圖的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。