小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

ggplot2都有哪些使用不多但是卻異常強大的圖層函數(shù)

 yjt2004us 2018-05-20

要說ggplot2中那些使用不多但是卻功能強大的圖層函數(shù),我首先想到的就是geom_rect、geom_linerange、geom_segment、geom_ploygon。

這四個函數(shù)分別定義了ggplot2中的矩形圖、垂直線圖(線范圍圖)、線段圖、幾何多邊形圖。

這四種圖表類型獨立使用的機會很少,一般都是作為圖表的輔助信息,但是如果能恰到好處的使用,你會挖掘出很多新意。

geom_rect()

geom_rect()一般用于制作自定義矩形,僅需在美學(xué)映射中指定每一個矩形在坐標(biāo)系統(tǒng)中的左邊界、右邊界、下邊界、上邊界即可。

分辨對應(yīng)xmax,xmax,ymin,ymax等四個美學(xué)映射參數(shù),當(dāng)然單個矩形仍然可以執(zhí)行分組顏色映射操作。

具體示意如下:

library('showtext')
library('ggplot2')
library('magrittr')
library('reshape2')
library('ggthemes')
library('dplyr')mydata <- data.frame(=""  lebal=""  ="">'Point1','Point2','Point3','Point4','Point5'),  xstart = c(5.5,15.7,19.5,37.2,36.9),  xend   = c(9.7,28.1,24.6,44.6,47.1),  ystart = c(9.6,23.1,2.3,33.2,9.2),  yend   = c(16.1,36.2,11.7,38.5,15.3),  size   = c(12,48,30,11.5,28),  class  = c('A','A','A','C','C'))
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() +  scale_y_continuous(expand = c(0,0)) +  coord_polar(theta = '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()

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軸圓周化

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() +  scale_y_continuous(expand = c(0,0)) +  coord_polar(theta = 'x')
#按照y軸圓周化

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() +  scale_y_continuous(expand = c(0,0)) +  coord_polar(theta = 'y')
#分面操作:

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  ) +  facet_grid(.~class) +  scale_colour_wsj() +  scale_y_continuous(expand = c(0,0))



感覺沒啥卵用?想想這幾個圖怎么實現(xiàn)?


geom_linerange()

這個圖層函數(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()
# 橫縱軸互換:

ggplot(mydata) +  geom_linerange(aes(x = xstart, ymin = ymin , ymax = ymax , colour = class) , size = 1.5) +  coord_flip() +  scale_colour_wsj()
#按x軸圓周化:

ggplot(mydata) +  geom_linerange(aes(x = xstart, ymin = ymin , ymax = ymax , colour = class) , size = 1.5) +  scale_colour_wsj() +  scale_x_continuous(limits = c(0,25),expand = c(0,0)) +  coord_polar(theta = 'x')
#按y軸圓周化:

ggplot(mydata) +  geom_linerange(aes(x = xstart, ymin = ymin , ymax = ymax , colour = class) , size = 1.5) +  scale_colour_wsj() +  scale_y_continuous(expand = c(0,0)) +  coord_polar(theta = 'y')
#分面:

ggplot(mydata) +  geom_linerange(aes(x = xstart, ymin = ymin , ymax = ymax , colour = class) , size = 1.5) +  scale_colour_wsj() +  facet_grid(.~class) +  scale_x_continuous(limits = c(0,25),expand = c(0,0))
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ù),可以想象的空間也很大噠!


geom_polygon()

最后一個可以說是很厲害了,幾乎是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))
#

ggplot(mydata) +  geom_polygon(aes(x = long , y = lat , group  = group , fill = class),colour = 'white') +  scale_fill_wsj()
#按照X軸圓周化:

ggplot(mydata) +  geom_polygon(aes(x = long , y = lat , group  = group , fill = class),colour = 'white') +  coord_polar(theta = 'x') +  scale_x_continuous(expand = c(0,0)) +  scale_fill_wsj()
#按照y軸圓周化:

ggplot(mydata) +  geom_polygon(aes(x = long , y = lat , group  = group , fill = class),colour = 'white') +  coord_polar(theta = 'y') +  scale_y_continuous(expand = c(0,0)) +  scale_fill_wsj()
#分面:

ggplot(mydata) +  geom_polygon(aes(x = long , y = lat , group  = group , fill = class),colour = 'white') +facet_grid(.~class) +  scale_fill_wsj()


那么關(guān)于這個圖層函數(shù),到底有啥用呢,用處大了去了,不信請看:


這個幾個圖形應(yīng)該算是平時使用幾率不會很高的圖形了,但是用的恰到好處的話,能夠做出非常驚艷的效果,趕快試一試吧~

《R語言商務(wù)圖表與數(shù)據(jù)可視化》的課程已經(jīng)更新到空間地理信息數(shù)據(jù)可視化的章節(jié)了,感興趣的童鞋,不了解一下嘛~

https://edu./course/264

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多