|
要說ggplot2中那些使用不多但是卻功能強大的圖層函數(shù),我首先想到的就是geom_rect、geom_linerange、geom_segment、geom_ploygon。 這四個函數(shù)分別定義了ggplot2中的矩形圖、垂直線圖(線范圍圖)、線段圖、幾何多邊形圖。 這四種圖表類型獨立使用的機會很少,一般都是作為圖表的輔助信息,但是如果能恰到好處的使用,你會挖掘出很多新意。
geom_rect()一般用于制作自定義矩形,僅需在美學(xué)映射中指定每一個矩形在坐標(biāo)系統(tǒng)中的左邊界、右邊界、下邊界、上邊界即可。 分辨對應(yīng)xmax,xmax,ymin,ymax等四個美學(xué)映射參數(shù),當(dāng)然單個矩形仍然可以執(zhí)行分組顏色映射操作。 具體示意如下: library('showtext')ggplot(mydata)+ geom_rect(aes(xmin = xstart,xmax = xend , ymin = ystart , ymax = yend , fill = class)) + scale_fill_wsj()按照x軸進行圓周化:ggplot(mydata)+ geom_rect(aes(xmin = xstart,xmax = xend , ymin = ystart , ymax = yend , fill = class)) + scale_fill_wsj() + ylim(-10,40) + scale_x_continuous(expand = c(0,0)) + coord_polar(theta = 'x')#按照y軸進行圓周化分面操作:ggplot(mydata)+ geom_rect(aes(xmin = xstart,xmax = xend , ymin = ystart , ymax = yend , fill = class)) + scale_fill_wsj() + facet_grid(.~class) + scale_y_continuous(expand = c(0,0))想想這幾個圖如何使用上述圖層實現(xiàn)?
geom_segment通常用于制作直線段圖,路徑圖、放射線圖等,思路也很簡單,只需要指定每一條線段的起點坐標(biāo)、終點坐標(biāo)即可。 即分別制定x,y,xend,yend。 具體示意如下: mydata <- data.frame(="" lebal="" ="">->'Segment1','Segment2','Segment3','Segment4','Segment5'), xstart = c(3.5,4.4,8.3,13.2,20), ystart = c(5,2.7,4.6,2.2,4.7), xend = c(7.5,8.7,21,25,23), yend = c(7.9,4.2,7.2,3.8,4.4), class = c('A','A','A','C','C'))ggplot(mydata) + geom_segment( aes( x = xstart, y = ystart, xend = xend, yend = yend, colour = class ), arrow = arrow(length = unit(0.5,'cm')), size = 1.5 ) + scale_colour_wsj()#按照X軸圓周化#按照y軸圓周化#分面操作:
感覺沒啥卵用?想想這幾個圖怎么實現(xiàn)?
這個圖層函數(shù)乍看起來真的沒啥用,貌似很多輔助圖形都可以替代,比如那些誤差線(geom_errorbar)、垂直線(geom_vline)、水平線(geom_hline)等。 但是其實不然,這個grom_linerange函數(shù)可以實現(xiàn)批量美學(xué)映射,包含線條顏色自定義、粗細(xì)自定義、線型自定義以及線條上下邊界的自定義,通過coord_flip函數(shù)還可以將垂直線的所有應(yīng)用轉(zhuǎn)化為水平線應(yīng)用,非常方便。 只需要指定x值,y軸的上下邊界即可。 即x,ymin,ymax。
mydata <- data.frame(="" lebal="" ="">->'linerange1','linerange2','linerange3','linerange4','linerange5'), xstart = c(3.5,7,12,16,20), ymin = c(2.5,6.5,3,4.5,3.8), ymax = c(7.5,9.5,9,13.5,4.2), class = c('A','A','A','C','C'))ggplot(mydata) + geom_linerange(aes(x = xstart, ymin = ymin , ymax = ymax , colour = class) , size = 1.5) + scale_colour_wsj()# 橫縱軸互換:#按x軸圓周化:#按y軸圓周化:#分面:ggplot(mydata) + geom_linerange(aes(x = xstart, ymin = ymin , ymax = ymax , colour = class) , size = 1.5) + coord_flip() + scale_colour_wsj() + facet_grid(.~class) + scale_x_continuous(limits = c(0,25),expand = c(0,0))
這個圖層函數(shù)結(jié)合地圖數(shù)據(jù),可以想象的空間也很大噠!
最后一個可以說是很厲害了,幾乎是ggplot2里面最為復(fù)雜、強大、適應(yīng)性廣的圖層函數(shù)了,因為它使用極限思維,什么東西都是用盡可能多的點來擬合。 想象一下我們常見的大部分圖表都是由點線面集合元素來構(gòu)成,所以理論上說,只要你能從這個圖形對象中發(fā)現(xiàn)規(guī)律,從而得到盡可能多的圖形邊界點,那么使用geom_polygon對象來實現(xiàn)目標(biāo)圖形那都是分分鐘的事兒。 它的思路是我們對象看成是若干個閉合多邊形,每一個閉合多邊形通過一組有序點坐標(biāo)進行首尾連接,之后再按照事物真實的隸屬關(guān)系對group(閉合多邊形)進行二次分組,按照有意義的組別進行顏色映射。 具體示意如下:
mydata <- data.frame(="" long="">->15.4,17.2,19.7,15.9,7.4,8.9,8.5,10.4,11.3,9.7,4.8,3.7,22.4,25.6,27.8,25.1,16.7,15.9,29.9,38.7,43.2,40.2,35.6,29.4), lat = c(38.1,36.2,33.1,24.6,29.0,33.6,12.1,11.7,8.9,6.1,5.7,9.1,8.4,7.6,5.7,3.9,4.3,5.9,32.6,31.8,27.6,22.3,24.5,29.6), group= c(1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4), order =c(1,2,3,4,5,6,1,2,3,4,5,6,1,2,3,4,5,6,1,2,3,4,5,6), class = rep(c('A','c'),each = 12))##按照X軸圓周化:#按照y軸圓周化:#分面:
那么關(guān)于這個圖層函數(shù),到底有啥用呢,用處大了去了,不信請看:
這個幾個圖形應(yīng)該算是平時使用幾率不會很高的圖形了,但是用的恰到好處的話,能夠做出非常驚艷的效果,趕快試一試吧~ 《R語言商務(wù)圖表與數(shù)據(jù)可視化》的課程已經(jīng)更新到空間地理信息數(shù)據(jù)可視化的章節(jié)了,感興趣的童鞋,不了解一下嘛~ https://edu./course/264 |
|
|