使用ggplot2進行高級繪圖--修改 ggplot2 圖形的外觀( 坐標軸、圖例、標尺、主題、多重圖)


使用ggplot2進行高級繪圖--修改 ggplot2 圖形的外觀

1  坐標軸

ggplot2包會在創建圖時自動創建刻度線、刻度標記標簽和坐標軸標簽。它們往往看起來不錯,但是有時我們需要在更大程度上控制它們的外觀。我們已經知道了如何通過labs()函數來添加標題並改變坐標軸標簽。那么如何自定義軸標簽?下表包含了用於自定義坐標軸的函數。

控制坐標軸和刻度線外觀的函數

 

可以看到,ggplot2的函數區分x軸和y軸,以及軸線是否代表一個連續或離散變量(因子)

將這些函數應用到一個分組箱線圖中,其中包含按學術等級和性別分組的薪資水平,代碼如下:

data(Salaries,package="car")

library(ggplot2)

ggplot(data=Salaries, aes(x=rank, y=salary, fill=sex)) +

  geom_boxplot() +

  scale_x_discrete(breaks=c("AsstProf", "AssocProf", "Prof"),

                   labels=c("Assistant\nProfessor",

                            "Associate\nProfessor",

                            "Full\nProfessor")) +

  scale_y_continuous(breaks=c(50000, 100000, 150000, 200000),

                     labels=c("$50K", "$100K", "$150K", "$200K")) +

  labs(title="Faculty Salary by Rank and Sex", x="", y="")

 

結果分析:很明顯,平均收入隨着學術排名的上升而上升,在每個學術等級中男性的薪資水平高於女性。

2  圖例

圖例是指出如何用顏色、形狀、尺寸等視覺特性表示數據特征的指南。ggplot2包能自動生成圖例,而且在很多時候能夠滿足我們的需求;但是在其他時候,我們可能要對其進行自定義。標題和位置是最常用的定制特征。

標題的位置由theme()函數中的legend.position選項控制。可能的值包括"left""top""right"(默認值)和"bottom"。我們也可以在圖中給定的位置指定一個二元素向量。

調整圖中的圖形,使圖例出現在左上角並且將標題從sex變為Gender。可以通過下面的代碼來完成這個任務:

data(Salaries,package="car")

library(ggplot2)

ggplot(data=Salaries, aes(x=rank, y=salary, fill=sex)) +

 geom_boxplot() +

 scale_x_discrete(breaks=c("AsstProf", "AssocProf", "Prof"),

 labels=c("Assistant\nProfessor",

  "Associate\nProfessor",

 "Full\nProfessor")) +

 scale_y_continuous(breaks=c(50000, 100000, 150000, 200000),

 labels=c("$50K", "$100K", "$150K", "$200K")) +

 labs(title="Faculty Salary by Rank and Gender",

 x="", y="", fill="Gender") +

 theme(legend.position=c(.1,.8))

 

結果分析:圖例的左上角是分別距離左側邊緣10%和底部邊緣80%的部分。如果想刪除圖例,可以使用legend.position="none"

3  標尺

ggplot2包使用標尺把數據空間的觀察值映射到可視化的空間中。標尺既可以應用到連續的變量,也可以應用到離散的變量。

一個連續性的標尺把yrs.since.phd變量的數值映射到x軸,同時將salary的變量映射到y軸。

連續型的標尺可以映射數值型的變量到圖的其他特征。代碼如下:

ggplot(mtcars, aes(x=wt, y=mpg, size=disp)) +

  geom_point(shape=21, color="black", fill="cornsilk") +

  labs(x="Weight", y="Miles Per Gallon",

       title="Bubble Chart", size="Engine\nDisplacement")

 

結果分析:按里程划分的汽車重量的氣泡圖。點的大小代表發動機排量,aes()函數的參數size=disp生成連續型變量disp(發動機排量)的標尺,並使用它來控制點的尺寸。結果如圖所示的氣泡圖。從該圖中可以看出汽車里程隨重量和發動機排量的降低而降低。

在這個離散的例子中,可以使用標尺將帶有因子水平的視覺線索(如顏色、形狀、線條類型、尺寸和透明度)關聯起來。下列代碼:

data(Salaries, package="car")

ggplot(data=Salaries, aes(x=yrs.since.phd, y=salary, color=rank)) +

 scale_color_manual(values=c("orange", "olivedrab", "navy")) +

 geom_point(size=2)

 

結果分析:使用scale_color_manual()函數來設定三個學術等級的點的顏色,可以看到,隨着教齡的增大,大部分教授的薪水時越來越多的。

4  主題

theme()函數中的選項可以讓我們調整字體、背景、顏色和網格線等。主題可以使用一次,也可以保存起來應用到多個圖中。運行下面的代碼:

data(Salaries, package="car")

library(ggplot2)

mytheme <- theme(plot.title=element_text(face="bold.italic",

                                         size="14", color="brown"),

                 axis.title=element_text(face="bold.italic",

                                         size=10, color="brown"),

                 axis.text=element_text(face="bold", size=9,

                                        color="darkblue"),

                 panel.background=element_rect(fill="white",

                                               color="darkblue"),

                 panel.grid.major.y=element_line(color="grey",

                                                 linetype=1),

                 panel.grid.minor.y=element_line(color="grey",

                                                 linetype=2),

                 panel.grid.minor.x=element_blank(),

                 legend.position="top")

ggplot(Salaries, aes(x=rank, y=salary, fill=sex)) +

  geom_boxplot() +

  labs(title="Salary by Rank and Sex", x="Rank", y="Salary") +

  mytheme

 

結果分析:主題mytheme指定了圖的標題應該為粗斜體的棕色14號字。軸的標題為粗斜體的棕色10號字。坐標軸標簽應為加粗的深藍色9號字。畫圖區域有白色的填充和深藍色的邊框。主水平網格應該是灰色的實線,次水平網格應該是灰色的虛線;垂直網格不輸出;圖例展示在圖的頂部。

5  多重圖

將多個ggplot2包的圖形放到單個圖形中最簡單的方式是使用gridExtra包中的grid.arrange()函數。們創建三個ggplot2圖並把它們放在單個圖形中。下面給出相關的代碼:

data(Salaries, package="car")

library(ggplot2)

p1 <- ggplot(data=Salaries, aes(x=rank)) + geom_bar()

p2 <- ggplot(data=Salaries, aes(x=sex)) + geom_bar()

p3 <- ggplot(data=Salaries, aes(x=yrs.since.phd, y=salary)) + geom_point()

library(gridExtra)

grid.arrange(p1, p2, p3, ncol=3)

 

6 保存圖形

ggsave()函數能更方便地保存它。它的選項包括保存哪幅圖形,保存在哪里和以什么形式保存。例如:

myplot <- ggplot(data=mtcars, aes(x=mpg)) + geom_histogram()

ggsave(file="mygraph.png", plot=myplot, width=5, height=4)

在當前路徑下將myplot保存為名為mygraph.png5英寸×4英寸(12.7厘米×10.2厘米)PNG格式的圖片。

如果忽略plot=選項,最近創建的圖形會被保存。代碼:

ggplot(data=mtcars, aes(x=mpg)) + geom_histogram()

ggsave(file="mygraph.pdf")

是有效的,並把圖形保存到磁盤


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM