這篇文章主要介紹“R語言可視化實(shí)現(xiàn)圖表嵌套”,在日常操作中,相信很多人在R語言可視化實(shí)現(xiàn)圖表嵌套問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”R語言可視化實(shí)現(xiàn)圖表嵌套”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
創(chuàng)新互聯(lián)建站,為您提供重慶網(wǎng)站建設(shè)、網(wǎng)站制作公司、網(wǎng)站營銷推廣、網(wǎng)站開發(fā)設(shè)計(jì),對服務(wù)玻璃隔斷等多個(gè)行業(yè)擁有豐富的網(wǎng)站建設(shè)及推廣經(jīng)驗(yàn)。創(chuàng)新互聯(lián)建站網(wǎng)站建設(shè)公司成立于2013年,提供專業(yè)網(wǎng)站制作報(bào)價(jià)服務(wù),我們深知市場的競爭激烈,認(rèn)真對待每位客戶,為客戶提供賞心悅目的作品。 與客戶共同發(fā)展進(jìn)步,是我們永遠(yuǎn)的責(zé)任!
之前在學(xué)習(xí)ggplot的時(shí)候,一直存在著一個(gè)困惑。
就是這個(gè)函數(shù)是否允許兩個(gè)做出來的兩個(gè)相關(guān)圖表重疊嵌套(也就是在一個(gè)大圖(主圖)的邊緣位置,放置另一個(gè)縮小版的小圖)。
這個(gè)想法很奇葩,本來想著沒啥希望,鑒于該包的開發(fā)者那犀利的審美觀,估計(jì)也不能允許這種情況的發(fā)生。
不過最近瀏覽一位大神的博客,真的有這種情況的解決措施,喜出望外,趕緊在這里分享給大家。
不過他的處理方式不是通過ggplot的內(nèi)置函數(shù),而是通過grid包中的viewport函數(shù)來實(shí)現(xiàn)的:
以下是具體的實(shí)現(xiàn)步驟:
加載包:
library(ggplot2) #用于畫圖,主圖和附圖都使用ggplot的內(nèi)置數(shù)據(jù)集
library(grid) #用于設(shè)定附圖的長寬及疊放在主圖的精確位置
加載并預(yù)覽數(shù)據(jù)集:
這里我們還是使用關(guān)于鉆石的那個(gè)數(shù)據(jù)集(之前的圖表案例很多都是使用該數(shù)據(jù)集)
data(diamonds)
head(diamonds)
#制作復(fù)合圖的主圖:
chart1<-ggplot(diamonds,aes(carat,price,colour=cut))+geom_point()+theme(legend.position=c(0.9,0.72),legend.background=element_rect(I(0)))
以上函數(shù)可以制作出以carat和price為主要對應(yīng)關(guān)系的散點(diǎn)圖,同時(shí)分類變量cut通過顏色映射進(jìn)行區(qū)分。最后調(diào)整了圖例位置和圖表背景。
#設(shè)定附圖長寬及其最終落在主圖上的精確位置:
vie<-viewport(width=0.669,height=0.4,x=0.7,y=0.306)
#制作附圖
chart2 <-ggplot(diamonds,aes(depth,fill=cut,alpha=.2))+geom_density()+xlim(54,70) +
theme(axis.text.y=element_text(face="bold",colour="black"),
axis.title.y=element_blank(),
axis.text.x=element_text(face="bold",colour="black"),
plot.background=element_rect(I(0),linetype=0),
panel.background=element_rect(I(0)),
panel.grid.major=element_line(colour=NA),
panel.grid.minor=element_line(colour=NA),
legend.background=element_rect(I(0),linetype=1),
legend.position=c(0.85,0.72))
chart2 #預(yù)覽附圖
因?yàn)楦綀D要放置在主圖邊緣并且縮放很大比例,為了防止其背景和網(wǎng)格線系統(tǒng)遮擋主圖的重要信息,對其主題元素進(jìn)行了大量的簡化。
將主圖與附圖合成一并顯示:
print(chart2,vp=vie)
將以上代碼打包組合:
chart1<-ggplot(diamonds,aes(carat,price,colour=cut))+geom_point()+theme(legend.position=c(0.9,0.72),legend.background=element_rect(I(0)))
chart1
vie<-viewport(width=0.669,height=0.4,x=0.7,y=0.306)
chart2 <-ggplot(diamonds,aes(depth,fill=cut,alpha=.2))+geom_density()+xlim(54,70) +
theme(axis.text.y=element_text(face="bold",colour="black"),
axis.title.y=element_blank(),
axis.text.x=element_text(face="bold",colour="black"),
plot.background=element_rect(I(0),linetype=0),
panel.background=element_rect(I(0)),
panel.grid.major=element_line(colour=NA),
panel.grid.minor=element_line(colour=NA),
legend.background=element_rect(I(0),linetype=1),
legend.position=c(0.85,0.72))
print(chart2,vp=vie)
其實(shí)仔細(xì)看這種做法,里面也不外乎圖層疊加,先做出主圖,然后通過viewport函數(shù)將附圖縮小并疊加到主圖上,不過這種方式用來展示一些需要多角度透視的數(shù)據(jù)分布問題還是很合適的,而且因?yàn)槭且蕾囉诓煌陌?,所有主圖與附圖之間沒有嚴(yán)格的類型限制,你所需要做的只是調(diào)整好兩個(gè)圖表的位置與大小,別讓彼此相互遮擋掩蓋重要信息就OK了。
下面我將附圖的類型更換為堆積直方圖大家看下效果:
chart1<-ggplot(diamonds,aes(carat,price,colour=cut))+geom_point()+theme(legend.position=c(0.9,0.72),legend.background=element_rect(I(0)))
chart1
vie<-viewport(width=0.669,height=0.4,x=0.7,y=0.306)
chart2 <-ggplot(diamonds,aes(depth,fill=color))+geom_histogram()+xlim(54,70) +
theme(axis.text.y=element_text(face="bold",colour="black"),
axis.title.y=element_blank(),
axis.text.x=element_text(face="bold",colour="black"),
plot.background=element_rect(I(0),linetype=0),
panel.background=element_rect(I(0)),
panel.grid.major=element_line(colour=NA),
panel.grid.minor=element_line(colour=NA),
legend.background=element_rect(I(0),linetype=1),
legend.position=c(0.85,0.72))
print(chart2,vp=vie)
到此,關(guān)于“R語言可視化實(shí)現(xiàn)圖表嵌套”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!