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