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