image.png
2.3 几何图形的堆叠
library(ggplot2)
data(singer, package="lattice")
ggplot(singer, aes(x=voice.part, y=height)) +
geom_violin(fill="lightblue") +
geom_boxplot(fill="lightgreen", width=.2)
image.png
2.4 分组
在R中,组通常用分类变量的水平(因子)来定义。分组是通过ggplot2图将一个或多个带有诸如形状、颜色、填充、尺寸和线类型的视觉特征的分组变量来完成的。
- ggplot()声明中的aes()函数负责分配变量(图形的视觉特征)
- 变量应该设在aes()函数内,分配常数应该在aes()函数外,变量在aes()内外的效果是完全不同的
- 需要注意的是,分组可能是连续变量,在指定颜色时可能会报错,因此需要先转换为分类因子
## 初次使用需install.packas("car")
library(car)
## 加载Salaries可能会报错,但是不影响出图
data(Salaries, package="car")
library(ggplot2)
## aes()指定分组
## 填充设置透明度(alpha),使重叠曲线不掩盖彼此
ggplot(data=Salaries, aes(x=salary, fill=rank)) +
geom_density(alpha=.3)
image.png
2.5 刻面
- 基础画图的mfcol,mfrow,layout不适用与ggplot
- 可以使用facet_wrap()函数和facet_grid()函数创建网格图形(在ggplot2中也称刻面图)
语法 |
结果 |
facet_wrap(~var,ncol=n) |
将每个var水平排列成n列的独立图 |
facet_wrap(~var,nrow=n) |
将每个var水平排列成n行的独立图 |
facet_grid(rowvar~colvar) |
rowvar和colvar组合的独立图,其中rowvar表示行,colvar表示列 |
facet_grid(rowvar~.) |
每个rowvar水平的独立图,配置成一个单列 |
facet_grid(.~colvar) |
每个colvar水平的独立图,配置成一个单行 |
data(singer, package="lattice")
library(ggplot2)
ggplot(data=singer, aes(x=height)) +
geom_histogram() +
facet_wrap(~voice.part, nrow=4)
image.png
2.6 添加光滑曲线
- geom_smooth()函数被用来添加一系列的平滑曲线和和置信区域
选 项 |
描 述 |
method= |
使用的平滑函数。允许的值包括lm、glm、smooth、rlm和gam,分别对应线性、广义线性、loess、健壮线性和广义相加模型。smooth是默认值 |
formula= |
在光滑函数中使用的公式。例子包括y~x(默认),y ~ log(x),y~poly(x,n)表示n次多项式拟合,y ~ ns(x,n)表示一个具有n个自由度的样条拟合 |
se |
绘制置信区间(TRUE/FALSE)。默认为TRUE |
level |
使用的置信区间水平(默认为95%) |
fullrange |
指定拟合应涵盖全图(TRUE)或仅仅是数据(FALSE)。 默认为FALSE |
- 注意:ggplot2包中含有大量统计函数来计算所需要的量,从而生产更多的可视化数据。通常情况下几何函数隐式地调用统计函数,我们不需要直接处理这些问题。例如geom_smooth()函数依赖于stat_smooth()函数来计算画出一个拟合曲线及其置信限所需的数量。在探索几何函数如何工作和哪些选项可供选择时,一定要检查这个函数及其相关统计函数。
library(car)
data(Salaries, package="car")
library(ggplot2)
ggplot(data=Salaries, aes(x=yrs.since.phd, y=salary)) +
geom_smooth() + geom_point()
image.png
2.7 修改ggplot2 图形的外观
- 基础函数使用par()函数或特定画图函数的图形参数来自定义基本函数。
但是改变基本图形参数对于ggplot2图形没有影响
2.7.1 坐标轴
- ggplot2包会在创建图时自动创建刻度线、刻度标记标签和坐标轴标签
- labs()函数可用来来添加标题并改变坐标轴标签
- 控制坐标轴及刻度线外观的函数
ggplot2的函数区分x轴和y轴,以及轴线是否代表一个连续或离散变量(因子)(连续:continuous,离散:discrete)。
| 函 数 | 选 项 |
| - | - |
| scale_x_continuous()和scale_y_continuous() | breaks=指定刻度标记,labels=指定刻度标记标签,limits=控制要展示的值的范围 |
| scale_x_discrete()和scale_y_discrete() | breaks=对因子的水平进行放置和排序,labels=指定这些水平的标签,limits=表示哪些水平应该展示 |
| coord_flip() | 颠倒x轴和y轴 |
library(car)
## 可能会报错没有‘Salaries’这个数据集,但不影响出图
data(Salaries,package="car")
library(ggplot2)
ggplot(data=Salaries, aes(x=rank, y=salary, fill=sex)) +
geom_boxplot() +
## 设置离散型变量x,x轴标签通过labels设置,“\n”为换行显示防止标签过长
scale_x_discrete(breaks=c("AsstProf", "AssocProf", "Prof"),
labels=c("Assistant\nProfessor",
"Associate\nProfessor",
"Full\nProfessor")) +
## 设置离散型变量y
scale_y_continuous(breaks=c(50000, 100000, 150000, 200000),
labels=c("$50K", "$100K", "$150K", "$200K")) +
## 标题设置为labs(),与轴标签“labels=”进行区分
labs(title="Faculty Salary by Rank and Sex", x="", y="")
image.png
2.7.2 图例
- ggplot2包能自动生成图例,而且在很多时候能够满足我们的需求;但是在其他时候,我们可能要对其进行自定义。$\color{red}{标题和位置}是最常用的定制特征。
- 当更改图例的标题时,必须考虑图例是否基于颜色、填充、尺寸、形状或它们的组合。通常情况下aes()函数分组会自动生成图例,我们可以通过更改分组变量,如将fill="mytitle"加到labs()函数中来改变标题。
- 标题的位置由theme()函数中的legend.position选项控制。可能的值包括"left"、"top"、"right"(默认值)和"bottom"。我们也可以在图中给定的位置指定一个二元素向量。
- 如果想删除图例,可以使用legend.position="none"
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))
image.png
2.7.3 标尺
ggplot2包使用标尺aes("size=")把数据空间的观察值映射到可视化的空间中。标尺既可以应用到连续的变量,也可以应用到离散的变量
可以使用标尺将带有因子水平的视觉线索(如颜色、形状、线条类型、
尺寸和透明度)关联起来
## aes()函数的参数size=disp生成连续型变量disp(发动机排量)的标尺,并使用它来控制点的尺寸
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")
image.png
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)
image.png
可以通过scale_color_brewer()和scale_fill_brewer()函数来预先指定分得清的颜色集
为了得到可获得的颜色集,可以使用:
library(RColorBrewer)
display.brewer.all()
ggplot(data=Salaries, aes(x=yrs.since.phd, y=salary, color=rank)) +
scale_color_brewer(palette="Set1") + geom_point(size=2)
image.png
2.7.4 主题
theme()函数中的选项可以让我们调整字体、背景、颜色和网格线等。主题可以使用一次,也可以保存起来应用到多个图中。
主题元素 |
类型 |
描述 |
line |
|
所有线属性 |
rect |
|
所有矩形区域属性 |
text |
|
所有文本属性 |
title |
|
所有标题属性 |
plot.title |
text |
图表标题 |
plot.background |
rect |
图表背景 |
plot.margin |
|
图表边距 |
panel.background |
rect |
绘图区背景 |
panel.border |
rect |
绘图区边框 |
panel.margin |
rect |
绘图区边距 |
panel.grid |
line |
网格线系统 |
panel.grid.major |
line |
主网格线 |
panel.grid.minor |
line |
次网格线 |
panel.grid.major.x |
line |
x轴主网格线 |
panel.grid.major.y |
line |
x轴次网格线 |
panel.grid.minor.x |
line |
y轴主网格线 |
panel.grid.minor.y |
line |
y轴次网格线 |
axis.line |
line |
坐标轴线 |
axis.line.x |
line |
x坐标轴线 |
axis.line.y |
line |
y坐标轴线 |
axis.title |
text |
轴标题 |
axis.title.x |
text |
x轴标题 |
axis.title.y |
text |
y轴标题 |
axis.text |
text |
轴标签 |
axis.text.x |
text |
x轴标签 |
axis.text.y |
text |
y轴标签 |
axis.ticks |
line |
坐标轴刻度线 |
axis.ticks.x |
line |
x坐标轴刻度线 |
axis.ticks.y |
line |
y坐标轴刻度线 |
axis.ticks.length |
line |
刻度线长度 |
axis.ticks.margin |
line |
刻度线与刻度线标签间的间距 |
legend.background |
|
图例背景 |
legend.margin |
|
图例边界 |
legend.key |
|
图例符号 |
legend.key.size |
|
图例符号大小 |
legend.key.height |
|
图例符号高度 |
legend.key.width |
|
图例符号宽度 |
legend.text |
|
图例文本标签 |
legend.text.align |
|
图例文本对齐方式,0=左对齐,1=右对齐 |
legend.title |
|
图例标题 |
legend.title.align |
|
图例标题对齐方式 |
legend.position |
|
图例位置,left,right,bottom,top,二维向量 |
legend.direction |
|
图例排列方向,horizontal,vertical |
legend.justification |
|
图例居中方式,center,或者向量 |
legend.box |
|
多图例排列,horizontal,vertical |
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
image.png
2.7.5 保存图形
ggsave()函数能更方便地保存图形。它的选项包括保存哪幅图形,保存在哪里和以什么形式保存
ggsave( filename,
plot = last_plot(),
device = NULL,
path = NULL,
scale = 1,
width = NA,
height = NA,
units = c("in", "cm", "mm"),
dpi = 300,
limitsize = TRUE,
...
)
Reference
1.R语言实战第二版
2.https://blog.csdn.net/kmd8d5r/article/details/79386843