R語言中g(shù)gplot2繪制雙坐標(biāo)軸圖
R包ggplot2繪圖精美,可以做出很復(fù)雜的圖形,深受用戶喜愛。它的作者h(yuǎn)adley并不推薦使用ggplot2繪制雙坐標(biāo)軸圖,認(rèn)為這樣會(huì)增加讀圖的難度,但是目前需要雙坐標(biāo)軸圖應(yīng)用的場景還是很多,如下圖形直方圖和曲線分別有不同的坐標(biāo)軸,表示不同的意思,圖片展示內(nèi)容比較豐富
今天我們通過我們的汽車銷售數(shù)據(jù)(公眾號(hào)回復(fù):汽車銷售,可以獲得數(shù)據(jù))來演示一下ggplot2繪制雙坐標(biāo)軸圖,主要是通過sec.axis函數(shù)進(jìn)行轉(zhuǎn)換,進(jìn)行第二個(gè)坐標(biāo)軸的轉(zhuǎn)換。我們先來導(dǎo)入數(shù)據(jù)
library(foreign) library(ggplot2) library(plyr) bc <- read.spss("E:/r/test/tree_car.sav", use.value.labels=F, to.data.frame=T)
我們來看下數(shù)據(jù),car就是汽車售價(jià),age是年齡,gender是性別,inccat是收入,這里分成4個(gè)等級(jí),ed是教育程度。
我們用這個(gè)數(shù)據(jù)生成兩個(gè)子數(shù)據(jù),展示不同教育程度人群購車的區(qū)別,繼續(xù)使用原來的summarySE函數(shù)生成數(shù)據(jù),想了解這個(gè)函數(shù)的看《R語言繪制帶誤差和可信區(qū)間的折線圖》這篇文章,主要是利用這個(gè)函數(shù)生成不同類型的數(shù)據(jù)分析指標(biāo),函數(shù)的代碼如下:
summarySE <- function(data=NULL, measurevar, groupvars=NULL, na.rm=FALSE, conf.interval=.95, .drop=TRUE) { library(plyr) # New version of length which can handle NA's: if na.rm==T, don't count them length2 <- function (x, na.rm=FALSE) { if (na.rm) sum(!is.na(x)) else length(x) } # This does the summary. For each group's data frame, return a vector with # N, mean, and sd datac <- ddply(data, groupvars, .drop=.drop, .fun = function(xx, col) { c(N = length2(xx[[col]], na.rm=na.rm), mean = mean (xx[[col]], na.rm=na.rm), sd = sd (xx[[col]], na.rm=na.rm) ) }, measurevar ) # Rename the "mean" column datac <- rename(datac, c("mean" = measurevar)) datac$se <- datac$sd / sqrt(datac$N) # Calculate standard error of the mean # Confidence interval multiplier for standard error # Calculate t-statistic for confidence interval: # e.g., if conf.interval is .95, use .975 (above/below), and use df=N-1 ciMult <- qt(conf.interval/2 + .5, datac$N-1) datac$ci <- datac$se * ciMult return(datac) }
這個(gè)函數(shù)并不是今天的主要內(nèi)容,主要是看我們生成的數(shù)據(jù)
carss<- summarySE(bc, measurevar="car", groupvars=c("gender","ed")) carss1<- summarySE(bc, measurevar="car", groupvars=c("inccat","ed"))
我們來看看生成的兩個(gè)數(shù)據(jù)
Carss
carss1
carss1和carss都有ed這個(gè)數(shù)據(jù),carss1的數(shù)據(jù)比carss多,carss1有inccat這個(gè)指標(biāo)carss沒有
我們先畫一個(gè)carss數(shù)據(jù)的教育和汽車售價(jià)的直方圖
ggplot() + geom_col( data = carss,aes(x = ed,y = car),fill="#6794a7")
上圖展示了不同教育程度買車的情況,假設(shè)我們想把carss1這個(gè)數(shù)據(jù)的inccat和ci這個(gè)指標(biāo)映射進(jìn)上圖中(不管臨床意義,只是展示數(shù)據(jù)映射),我們可以看到ci這個(gè)指標(biāo)很小0-5這樣,而汽車這個(gè)指標(biāo)的范圍是0-80,不能通過同一坐標(biāo)軸展示,所以只能通過分軸展示。主要是通過rescale函數(shù)先把ci這個(gè)指標(biāo)在在0-80區(qū)間進(jìn)行標(biāo)準(zhǔn)化轉(zhuǎn)換,然后在投射于右坐標(biāo)軸。
先把inccat轉(zhuǎn)換成因子
carss1$inccat<-as.factor(carss1$inccat)
繪圖
ggplot() + geom_col( data = carss,aes(x = ed,y = car),fill="#6794a7")+ geom_line(data = carss1,aes(x = ed,y = rescale(ci,c(0,80)),colour=inccat,group=inccat),size=1.5) + geom_point(data = carss1,aes(x = ed,y = rescale(ci,c(0,80))),shape=21,fill="white",size=4)+ scale_y_continuous(breaks=pretty_breaks(4), sec.axis = sec_axis( ~rescale(.,c(0,5)),name = "ci",labels=sprintf('%.5f',(0:5))))
圖形左軸表示直方圖中購車情況,右軸表示不同收入人群的ci情況,把圖形進(jìn)一步美化一下
ggplot() + geom_col( data = carss,aes(x = ed,y = car),fill="#6794a7")+ geom_line(data = carss1,aes(x = ed,y = rescale(ci,c(0,80)),colour=inccat,group=inccat),size=1.5) + geom_point(data = carss1,aes(x = ed,y = rescale(ci,c(0,80))),shape=21,fill="white",size=4)+ scale_y_continuous(breaks=pretty_breaks(4), sec.axis = sec_axis( ~rescale(.,c(0,5)),name = "ci",labels=sprintf('%.5f',(0:5))))+ labs(title="This is a Title!",subtitle="This is a Subtitle",caption="This is a Caption")+ theme_minimal(base_size=16) %+replace% theme( plot.caption = element_text(hjust=0), plot.margin = unit(c(1,0.5,1,0.5), "lines") )
參考文獻(xiàn)
ggplot2:數(shù)據(jù)分析與圖形藝術(shù)
ggplot2雙坐標(biāo)軸的解決方案 杜雨 https://zhuanlan.zhihu.com/p/31872309
到此這篇關(guān)于R語言中g(shù)gplot2繪制雙坐標(biāo)軸圖的文章就介紹到這了,更多相關(guān)R語言 ggplot2雙坐標(biāo)軸圖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- R語言ggplot2圖例修改超詳細(xì)介紹
- R語言ggplot2設(shè)置圖例(legend)的操作大全
- R語言ggplot2圖例標(biāo)簽、標(biāo)題、順序修改和刪除操作實(shí)例
- R語言ggplot2拼圖包patchwork安裝使用
- R語言包ggplot實(shí)現(xiàn)分面去掉小標(biāo)題的灰色底色小技巧
- R語言學(xué)習(xí)ggplot2繪制統(tǒng)計(jì)圖形包全面詳解
- R語言數(shù)據(jù)可視化ggplot繪制置信區(qū)間與分組繪圖技巧
- R語言使用ggplot繪制畫中畫細(xì)節(jié)放大的方法
- R語言ggplot2之圖例的設(shè)置
- R語言ggplot2包之坐標(biāo)軸詳解
- R語言ggplot在熱圖上標(biāo)注相關(guān)系數(shù)的操作方法
相關(guān)文章
R語言數(shù)據(jù)可視化分析天貓雙十一銷售額增長率
這篇文章主要為大家介紹了R語言數(shù)據(jù)可視化來分析天貓雙十一銷售額增長率,來一探多年來歷年雙十一銷售額數(shù)據(jù)是否有造假,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-11-11R語言數(shù)據(jù)讀取以及數(shù)據(jù)保存方式
這篇文章主要介紹了R語言數(shù)據(jù)讀取以及數(shù)據(jù)保存方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-04-04R語言 數(shù)據(jù)表匹配和拼接 merge函數(shù)的使用
這篇文章主要介紹了R語言 數(shù)據(jù)表匹配和拼接 merge函數(shù)的使用說明,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03