R語言ggplot2包之坐標軸詳解
引言
我們還可以對圖形中的坐標軸進行處理,包括x、y軸對換、設定坐標軸范圍、刻度線修改與去除等等。要想對圖形玩得轉,坐標軸處理精通不可或缺。
坐標軸對換
我們使用coord_flip()函數來對換坐標軸。
library(ggplot2) library(gcookbook) ggplot(PlantGrowth, aes(x=group, y=weight)) + geom_boxplot() ggplot(PlantGrowth, aes(x=group, y=weight)) + geom_boxplot() + coord_flip()
置換x、y軸時有時候會導致某一坐標軸的坐標被逆轉。比如說原x軸的數據是從左往右閱讀的,在對換後,原來數據會從下往上給呈現。有時這是個問題。如果x是因子,我們可以對其用帶參數limits=rev(levels(…))的函數scale_x_discrete()進行修正。
如果是連續變量,我們可以使用函數scale_y_reverse 或者scale_x_reverse來逆轉坐標軸。
如果我們想改變分類變量的顯示順序,可以設置scale_x_discrete() or scale_y_discrete()函數就行。
#因子坐標軸 ggplot(PlantGrowth, aes(x=group, y=weight)) + geom_boxplot() + coord_flip() + scale_x_discrete(limits=rev(levels(PlantGrowth$group))) #連續變量的逆轉 ggplot(PlantGrowth, aes(x=group, y=weight)) + geom_boxplot() + scale_y_reverse() #改變分類變量順序 ggplot(PlantGrowth, aes(x=group, y=weight)) + geom_boxplot()+scale_x_discrete(limits=c("trt1","ctrl","trt2"))
設置x,y軸的連續變量范圍
我們可以使用xlim()和ylim設置x、y軸的最大最小值。
p <- ggplot(PlantGrowth, aes(x=group, y=weight)) + geom_boxplot() p + ylim(0, max(PlantGrowth$weight)) #ylim()是對scale_y_continuous()的快速實現。 #其中breaks用來控制刻度。 p + scale_y_continuous(limits=c(0, 10), breaks=NULL)
設置x、y軸刻度相對比例
我們可以設置x、y軸刻度的相對比例,可以是1:1,即一致的長度。也可以讓其中一個軸的刻度變得更長一些,或者說兩個刻度線之間的距離更大一些。
sp <- ggplot(marathon, aes(x=Half,y=Full)) + geom_point() #1:1 sp + coord_fixed() + scale_y_continuous(breaks=seq(0, 420, 30)) + scale_x_continuous(breaks=seq(0, 420, 30)) #1:2 x軸刻度長度比y軸刻度長度 sp + coord_fixed(ratio=1/2) + scale_y_continuous(breaks=seq(0, 420, 30)) + scale_x_continuous(breaks=seq(0, 420, 15))
設置刻度線的位置
ggplot()函數對處理刻度線位置非常擅長,隻要改變刻度的間隔即可(這裡的刻度線指的是大刻度線)。
如果坐標軸上變量是連續變量,則不會出現小刻度線。
#連續變量 ggplot(PlantGrowth, aes(x=group, y=weight)) + geom_boxplot() + scale_y_continuous(breaks=c(4, 4.25, 4.5, 5, 6, 8)) #看到沒有,刻度線位置已經按照breaks設置的參數改變瞭 #如果是離散變量,則使用scale_x_discrete函數 #通過limit函數來控制標簽的個數和順序 ggplot(PlantGrowth, aes(x=group, y=weight)) + geom_boxplot() + scale_x_discrete(limits=c("trt2", "ctrl"))
去除刻度線、刻度標簽和網格線
如果想去除刻度標簽,我們使用theme(axis.text.y = element_blank())(如果針對x,參數y改成x即可。
如果想去除刻度線,在theme函數中使用axis.ticks.y = element_blank(),如果x、y軸都想去除axis.ticks.y改成axis.ticks即可。
有時候網格線讓整個圖畫顯得復雜,我們也可以對此進行去除。breaks的參數值設為NULL就行瞭。
p <- ggplot(PlantGrowth, aes(x=group, y=weight)) + geom_boxplot() #去除刻度標簽 p + theme(axis.text.y = element_blank()) #去除刻度線 p + theme(axis.ticks.y = element_blank(), axis.text.y = element_blank()) #去除網格線 p + scale_y_continuous(breaks=NULL)
改變刻度標簽的內容和顯示效果
我們不僅可以改變刻度標簽的位置,還可以對標簽內容進行修改。
hwp <- ggplot(heightweight, aes(x=ageYear, y=heightIn)) + geom_point() hwp + scale_y_continuous(breaks=c(50, 56, 60, 66, 72), labels=c("Tiny", "Really\nshort", "Short", "Medium", "Tallish")) #值得註意的是,若標簽太長,可以用\n將文本放到下一行進行顯示
為瞭改變刻度標簽的顯示效果,我們可以在theme函數中設置element_text參數中angle的值。
bp <- ggplot(PlantGrowth, aes(x=group, y=weight)) + geom_boxplot() + scale_x_discrete(breaks=c("ctrl", "trt1", "trt2"), labels=c("Control", "Treatment 1", "Treatment 2")) #垂直顯示 bp + theme(axis.text.x = element_text(angle=90, hjust=1, vjust=.5)) #換個角度顯示,angle是控制刻度標簽顯示的角度 bp + theme(axis.text.x = element_text(angle=30, hjust=1, vjust=1)) #hjust和vjust是為瞭控制刻度標簽在水平方向和垂直方向的位置
改變坐標軸標簽內容
剛才改變的是刻度標簽,我們有時還想改變各個坐標軸中標簽內容。
hwp + xlab("Age in years") + ylab("Height in inches")#hwp在上面例子中已經定義過 #你也可以這麼改,兩者等價 hwp + labs(x = "Age in years", y = "Height in inches")
我們也可以去除各個坐標軸標簽。
hwp+ theme(axis.title.x=element_blank())
改變坐標軸標簽的顯示效果也同樣方便。
hwp + ylab("Height\n(inches)") + theme(axis.title.y=element_text(angle=90, face="italic", colour="darkred", size=14)) #這也同樣適用於改變刻度線標簽的字體、顏色大小。
使用對數坐標軸
我們也可以把坐標軸改變成對數坐標軸形式,使用scale_x_log10() scale_y_log10()。
library(MASS) p <- ggplot(Animals, aes(x=body, y=brain, label=rownames(Animals))) + geom_text(size=3) #隻顯示標簽線 p + scale_x_log10() + scale_y_log10()
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。如有錯誤或未考慮完全的地方,望不吝賜教。
推薦閱讀:
- None Found