image.png
之前有人在公眾號留言問文章開頭這幅圖如何實(shí)現(xiàn),下面的B圖是折線圖加柱形圖,相對比較容易實(shí)現(xiàn)阿浓,上面的A圖稍微有點(diǎn)復(fù)雜,我想到的辦法是拼圖蹋绽,圖A可以看成三個熱圖芭毙,然后加一個堆積柱形圖,最后將四個圖組合到一起卸耘。那就按照這個思路試一下看能不能實(shí)現(xiàn)退敦。
首先畫熱圖
這個熱圖和常規(guī)的還稍微有點(diǎn)不太一樣,可以簡單的理解為帶有缺失值的熱圖蚣抗,缺失值是空白格侈百,其他值分別填充顏色。
那我們就按照這個思路來構(gòu)造數(shù)據(jù)
image.png
將數(shù)據(jù)集按照以上格式整理好翰铡,存儲在csv文件中设哗。
首先是讀入數(shù)據(jù)
df<-read.csv("example_data/ggplot2_heatmap.csv",header=T)
以上數(shù)據(jù)是寬格式,借助reshape2這個包中的melt函數(shù)將寬格式轉(zhuǎn)變?yōu)殚L格式
df1<-reshape2::melt(df)
ggplot2畫熱圖
library(ggplot2)
ggplot(df1,aes(x=variable,y=A))+
geom_tile(aes(fill=value),color="black")+
theme(panel.background = element_blank())
image.png
這個地方遇到一個問題是缺失值如何給他填充為白色两蟀,我想到的辦法是給缺失值賦值為0,然后將0,1,2,3離散化處理震缭,然后分別分配顏色
df1$value1<-ifelse(is.na(df1$value),0,df1$value)
df1$value1<-as.factor(df1$value1)
summary(df1)
ggplot(df1,aes(x=variable,y=A))+
geom_tile(aes(fill=value1),color="black")+
scale_fill_manual(values = c("white","red","red2","red4"))+
theme(panel.background = element_blank())
image.png
這樣是不是和文章開頭提到的圖有點(diǎn)像了赂毯。
接下來是美化
調(diào)整一下y軸的的順序
df1$A<-factor(df1$A,levels = rev(df$A))
ggplot(df1,aes(x=variable,y=A))+
geom_tile(aes(fill=value1),color="black")+
scale_fill_manual(values = c("white","red","red2","red4"))+
theme(panel.background = element_blank())
image.png
將X軸放到頂部
ggplot(df1,aes(x=variable,y=A))+
geom_tile(aes(fill=value1),color="black")+
scale_fill_manual(values = c("white","orangered","red2","red4"))+
scale_x_discrete(position = "top")+
theme(panel.background = element_blank(),
axis.title = element_blank(),
axis.ticks = element_blank(),
axis.text.x.top = element_text(angle = 90,
hjust = 0,
vjust= 0.5),
plot.title = element_text(hjust=0.5),
legend.position = "none")+
labs(title = "Plant growth and development")
image.png
標(biāo)題的下滑線如何用代碼添加我暫時還不知道,直接出圖后手動編輯吧。上面的圖還忘記添加文字標(biāo)簽了党涕,下面補(bǔ)上
ggplot(df1,aes(x=variable,y=A))+
geom_tile(aes(fill=value1),color="black")+
scale_fill_manual(values = c("white","orangered","red2","red4"))+
scale_x_discrete(position = "top")+
theme(panel.background = element_blank(),
axis.title = element_blank(),
axis.ticks = element_blank(),
axis.text.x.top = element_text(angle = 90,
hjust = 0,
vjust= 0.5),
plot.title = element_text(hjust=0.5),
legend.position = "none")+
labs(title = "Plant growth and development")+
geom_text(aes(label=value1,color=value1))+
scale_color_manual(values = c("white","black","black","black"))
image.png
好了烦感,今天的內(nèi)容就介紹到這里了,下一期推文介紹利用堆積柱形圖給熱圖添加分組信息膛堤。
如果需要本文的示例數(shù)據(jù)手趣,直接在文末留言就好了
歡迎大家關(guān)注我的公眾號
小明的數(shù)據(jù)分析筆記本