使用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")

是有效的,并把图形保存到磁盘

posted @ 2021-08-17 20:53  zhang-X  阅读(3379)  评论(0编辑  收藏  举报