溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

R語言可視化實現(xiàn)圖表嵌套

發(fā)布時間:2021-07-23 09:07:58 來源:億速云 閱讀:162 作者:chen 欄目:大數(shù)據(jù)

這篇文章主要介紹“R語言可視化實現(xiàn)圖表嵌套”,在日常操作中,相信很多人在R語言可視化實現(xiàn)圖表嵌套問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”R語言可視化實現(xiàn)圖表嵌套”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

之前在學(xué)習(xí)ggplot的時候,一直存在著一個困惑。

就是這個函數(shù)是否允許兩個做出來的兩個相關(guān)圖表重疊嵌套(也就是在一個大圖(主圖)的邊緣位置,放置另一個縮小版的小圖)。

這個想法很奇葩,本來想著沒啥希望,鑒于該包的開發(fā)者那犀利的審美觀,估計也不能允許這種情況的發(fā)生。

不過最近瀏覽一位大神的博客,真的有這種情況的解決措施,喜出望外,趕緊在這里分享給大家。

不過他的處理方式不是通過ggplot的內(nèi)置函數(shù),而是通過grid包中的viewport函數(shù)來實現(xiàn)的:

以下是具體的實現(xiàn)步驟:

加載包:

library(ggplot2)  #用于畫圖,主圖和附圖都使用ggplot的內(nèi)置數(shù)據(jù)集

library(grid)     #用于設(shè)定附圖的長寬及疊放在主圖的精確位置

加載并預(yù)覽數(shù)據(jù)集:

這里我們還是使用關(guān)于鉆石的那個數(shù)據(jù)集(之前的圖表案例很多都是使用該數(shù)據(jù)集)

data(diamonds)

head(diamonds)

R語言可視化實現(xiàn)圖表嵌套

#制作復(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)))

R語言可視化實現(xiàn)圖表嵌套

以上函數(shù)可以制作出以carat和price為主要對應(yīng)關(guān)系的散點圖,同時分類變量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ù)覽附圖

R語言可視化實現(xiàn)圖表嵌套

因為附圖要放置在主圖邊緣并且縮放很大比例,為了防止其背景和網(wǎng)格線系統(tǒng)遮擋主圖的重要信息,對其主題元素進(jìn)行了大量的簡化。

將主圖與附圖合成一并顯示:

print(chart2,vp=vie)

R語言可視化實現(xiàn)圖表嵌套

將以上代碼打包組合:

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)

R語言可視化實現(xiàn)圖表嵌套

其實仔細(xì)看這種做法,里面也不外乎圖層疊加,先做出主圖,然后通過viewport函數(shù)將附圖縮小并疊加到主圖上,不過這種方式用來展示一些需要多角度透視的數(shù)據(jù)分布問題還是很合適的,而且因為是依賴于不同的包,所有主圖與附圖之間沒有嚴(yán)格的類型限制,你所需要做的只是調(diào)整好兩個圖表的位置與大小,別讓彼此相互遮擋掩蓋重要信息就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)

R語言可視化實現(xiàn)圖表嵌套

到此,關(guān)于“R語言可視化實現(xiàn)圖表嵌套”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI