當(dāng)使用ggplot2作圖的時(shí)候有限制坐標(biāo)軸的范圍的需求時(shí)可以使用的設(shè)置函數(shù)有3個(gè):
xlim( ) or ylim( )
scale_x_continuous(limits = c( )) or scale_y_continuous(limits = c( ))
coord_cartesian(ylim = c( ), xlim = c( ))
從本質(zhì)上來說這三個(gè)函數(shù)都可對坐標(biāo)軸的范圍進(jìn)行設(shè)置竞膳,但是不同的是前面兩函數(shù)當(dāng)有點(diǎn)超出指定的范圍時(shí),這些超出的點(diǎn)會(huì)被刪除伟桅,具體演示如下:
library(ggplot2)
模擬數(shù)據(jù)
a <- c(1,2,3,4,5,6,7,8,9)
b <- c(1,2,3,2,4,6,6,5,3)
原始的圖形
ggplot() +
geom_bar(mapping = aes(x=a, y=b), stat = "identity")
使用ylim()設(shè)置y軸范圍時(shí)祠饺,當(dāng)沒有點(diǎn)超出設(shè)置范圍則一切正常
ggplot() +
geom_bar(mapping = aes(x=a, y=b), stat = "identity") + ylim(0,7)
使用ylim()設(shè)置y軸范圍時(shí)越驻,當(dāng)有點(diǎn)超出設(shè)置范圍則超出的點(diǎn)會(huì)被remove
ggplot() +
geom_bar(mapping = aes(x=a, y=b), stat = "identity") + ylim(0,5)
使用scale__continuous函數(shù)設(shè)置范圍和lim()一樣會(huì)發(fā)生remove的情況
ggplot() +
geom_bar(mapping = aes(x=a, y=b), stat = "identity") + scale_y_continuous(limits = c(0,5))
而使用coord_cartesian(*lim = c( ))函數(shù)對坐標(biāo)軸起始位置進(jìn)行設(shè)置則不會(huì)出現(xiàn)remove的情況,圖形會(huì)把超出的部分截掉,只保留能在設(shè)置的坐標(biāo)范圍顯示的部分
ggplot() +
geom_bar(mapping = aes(x=a, y=b), stat = "identity") + coord_cartesian(ylim = c(0,5))
其中還有一個(gè)需要注意的點(diǎn)就是前面兩個(gè)起始位置都必須是0道偷,否則則不會(huì)顯示圖形缀旁,但是最后coord_cartesian(*lim = c( ))函數(shù)則會(huì)顯示從設(shè)置的起始位置開始的圖形:
當(dāng)起始位都置設(shè)置為1時(shí),coord_cartesian(*lim = c( ))函數(shù)的表現(xiàn)則最佳
ggplot() +
geom_bar(mapping = aes(x=a, y=b), stat = "identity") + ylim(1,7)
ggplot() +
geom_bar(mapping = aes(x=a, y=b), stat = "identity") + scale_y_continuous(limits = c(1,7))
ggplot() +
geom_bar(mapping = aes(x=a, y=b), stat = "identity") + coord_cartesian(ylim = c(1,7))
總的來說勺鸦,似乎coord_cartesian(*lim = c( ))函數(shù)對于坐標(biāo)軸范圍的設(shè)置似乎更加強(qiáng)大并巍,也推薦使用.