R语言统计分析——ggplot2绘图6——图形外观修改

参考资料:R语言实战【第2版】

1、坐标轴

        ggplot2包会在创建图的同时自动创建刻度线、刻度标记标签和坐标轴标签。它们往往看起来不错,但我们有时需要在更大程度上控制它们的外观。我们已经知道了如何通过labs()函数来添加标题并改变坐标轴标签。自定义坐标轴函数如下:

函数选项

scale_x_continuous()

scale_y_continuous()

breaks=指定刻度标记,labels=指定刻度标记标签,limits=控制要展示的值得范围

scale_x_discrete()

scale_y_discrete()

breaks=对因子的水平进行放置和排序,labels=指定这些水平的标签,limits=表示哪些水平应该展示
coord_flip()颠倒x轴和y轴

        由上面的函数可知:ggplot2的函数区分x轴和y轴,以及轴线是否代表一个连续或离散变量(因子)。

        下面让我们将这些函数应用到一个分组函数箱线图中,其中包含学术等级和性别分组的信息水平:

# 加载car包,用于调用其中的Salaries数据集
library(car)
# 加载ggplot2包
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包能自动生成图例,而且在很多时候能够满足我们的需求;但有些时候,我们需要进行自定义,标题和位置是最常用的定制特征。

        当更改图例的标题时,必须考虑图例是否基于颜色、填充、尺寸、形状或它们的组合。图例代表fill审美(见aes()函数),因此我们可以通过将fill="mytitle"加到labs()函数中来改变标题。

        标题的位置有theme()函数中的legend.position选项控制。可能的值包括"left"、"top"、"right"(默认值)和"bottom"。我们也可以在图中给定的位置指定一个二元素向量。如下图操作所示:

# 加载car包,用于调用其中的Salaries数据集
library(car)
# 加载ggplot2包
library(ggplot2)
# 绘图
ggplot(data=Salaries,aes(x=rank,y=salary,fill=sex))+
  geom_boxplot()+
  scale_x_discrete(breaks=c("AsstProf","AsscoProf","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(0.1,0.8))

        在上例中,图例的左上角分别距离左侧边缘10%和底部边缘80%的位置(theme(legend.position=c(0.1,0.8)))。如果想要删除图例,可以使用legend.position="none"。

3、标尺

        ggplot2包可以使用标尺把数据空间的观察值映射到可视化的空间中。标尺既可以应用到连续的变量,也可以应用到离散的变量。一个连续的标尺可以把Salaries数据集中的yrs.since.phd变量的数值映射到x轴,同时将salary的变量映射到y轴。

        连续型的标尺可以映射数值型的变量到图的其他特征。如下:

ggplot(data=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生成连续型变量(发动机排放)的标尺,并使用它来控制点的尺寸。

        下面一个离散的例子,我们可以使用标尺将担忧因子水平的视觉线索(如颜色、形状、线条类型、尺寸和透明度)关联起来。使用scale_color_manual()函数来设定三个学术等级的点的颜色。

# 加载car包,用于调用其中的Salaries数据集
library(car)
# 加载ggplot2包
library(ggplot2)
# 绘图
ggplot(data=Salaries,aes(x=yrs.since.phd,y=salary,color=rank))+
  geom_point(size=2)+
  scale_color_manual(values=c("orange","olivedrab","navy"))

        当然,也可以使用scale_color_brewer()和scale_fill_brewer()函数来预先指定颜色集,如下:

ggplot(data=Salaries,aes(x=yrs.since.phd,y=salary,color=rank))+
  geom_point(size=2)+
  scale_color_brewer(palette="Set1")

        把palette="Set1"用其他的值(例如"Set2"、 "Set3"、 "Pastel1"、"Pastel2"、 "Paired"、 "Dark2"或"Accent")来代替将会产生不同的颜色方案。为了得到可获得的颜色集,可以使用:

library(RColorBrewer)
display.brewer.all()

4、主题

        主题可以让我们控制这些图的整体外观。theme()函数的选项可以让我们调整字体、背景、颜色和网格线等。主题可以使用一次,也可以保存起来应用到多个图中。

# 加载car包,用于调用其中的Salaries数据集
library(car)
# 加载ggplot2包
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="gray",linetype=1),
               panel.grid.minor.y=element_line(color="gray",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()函数。我们在使用前需要事先安装这个包。如下:

install.packages("gridExtra")

        下面让我们创建三个ggplot2图并把它们放在单个图形中,如下:

# 加载car包,用于调用其中的Salaries数据集
library(car)
# 加载ggplot2包
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()
# 加载gridExtra包
library(gridExtra)
# 见上面3个ggplot2图合并到一个图形中
grid.arrange(p1,p2,p3,ncol=3)

        上例中,每个图都被保存为一个对象,然后用grid.arrange()函数保存到单个图形中。这里需要注意截面图和多重图的区别:截面图是基于一个或多个分类变量创建的一系列的图;而多重图则是将多个独立的图绘制到单个图形中。

6、保存图形

        我们通常使用ggsave()函数来保存ggplot2绘制的图。它的选项包括保存哪幅图形,保存在哪里和以什么形式保存。例如:

myplot<-ggplot(data=mtcars,aes(x=mpg))+geom_histogram()
ggsave(fill="mygraph.png",plot=myplot,width=5,height=4)

        上例是指在当前路径下将myplot保存为名为mygraph.png的5英寸×4英寸( 12.7厘米×10.2厘米) PNG格式的图片。我们可以通过设定文件扩展名为ps、 tex、 jpeg、 pdf、 tiff、 png、 bmp、 svg或wmf来保存为不同的格式。 wmf文件仅限在装有Windows系统的计算机中保存。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值