使用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.png 5 英寸 ×4 英寸( 12.7 厘米 ×10.2 厘米) PNG 格式的图片。

如果忽略 plot= 选项,最近创建的图形会被保存。代码:

ggplot(data=mtcars, aes(x=mpg)) + geom_histogram()
ggsave(file="mygraph.pdf")

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

本文来自博客园,作者: zhang-X ,转载请注明原文链接: https://www.cnblogs.com/YY-zhang/p/15154169.html