mian function:
ggplot()
: 初始化图形并指定数据来源
aes()
: 指定每个变量的角色
geom_XXX()
: 使用几何函数向图中添加几何对象(视觉输出)
使用串联符号 (+) 创建函数
图形保存:
ggsave(plot=p1, file="mygraph.pdf", width = 3, height = 4)
以pdf格式保存了图片p1,命名为mygraph,3英寸宽4英寸高
e.g.
ggplot(data=mtcars, aes(x=hp, y=mpg,color=cyl))+
geom_point(size=3)+
facet_grid(am~vs)+
labs(title='Automobile Data by Engine Type',
x='Horsepower', y='Miles Per Gallon')
1 几何函数
函数 | 图形 | 参数 |
---|---|---|
geom_bar() | 条形图 | color, fill, alpha |
geom_boxplot() | 箱线图 | color, fill, alpha, notch, width |
geom_density() | 密度图 | color, fill, alpha, linetype |
geom_histogram() | 直方图 | color, fill, alpha, linetype, binwidth |
geom_point() | 散点图 | color, alpha, shape, size |
geom_rug() | 地毯图 | color, side |
geom_violin() | 小提琴图 | color, fill, alpha, linetype |
geom_hline() | 水平线 | color, alpha, linetype, size |
geom_line() | 线图 | colorvalpha, linetype, size |
geom_smooth() | 拟合曲线 | method, formula, color, fill, linetype, size |
常用参数
参数 | 详述 |
---|---|
color | 对点、线和填充区域的边界进行着色 |
fill | 对填充区域着色,如条形和密度区域 |
alpha | 颜色的透明度,从0(完全透明)到1(不透明) |
linetype | 图案的线条(1=实线,2=虚线,3=点,4=点破折号,5=长破折号,6=双破折号) |
size | 点的尺寸和线的宽度 |
shape | 点的形状(和pch一样,0=开放的方形,1=开放的圆形,2=开放的三角形,16=实心圆点,等等) |
position | 绘制诸如条形图和点等对象的位置。对条形图来说,'dodge'将分组条形图并排,'stacked'堆叠分组条形图,'fill'垂直地堆叠分组条形图并规范其高度相等(比例)。对于点来说,'jitter'减少点重叠。 |
binwidth | 直方图的宽度 |
notch | 表示方块图是否应为缺口(TRUE/FALSE) |
sides | 地毯图的安置("b"=底部, "l"=左部,"t"=顶部,"r"=右部,"bl"=左下部,等等) |
width | 箱线图的宽度 |
e.g. 以'car'包中的Salaries数据集为例
# 安装 "car" 包
install.packages("car")
library('car')
Salaries <- carData::Salaries
> colnames(Salaries)
[1] "rank" "discipline" "yrs.since.phd" "yrs.service"
[5] "sex" "salary"
library(ggplot2)
ggplot(Salaries, aes(x=rank,y=salary))+
geom_boxplot(fill="cornflowerblue",color='black',notch = F)+
geom_point(position = 'jitter',color='blue',alpha=.5)+
geom_rug(side="1", color= 'black')
- 可通过
reorder()
函数对x轴变量进行排序
Default method:
reorder(x, X, FUN = mean, ..., order = is.ordered(x))
x: 待排序变量,可为factor
X: 待排序变量的排序依据,长度与x相同
FUN: X的排序方式
order = is.ordered(x): 是否输出 ordered factor
e.g. 以mpg数据集为例
rm(list = ls())
library(tidyverse)
library(gridExtra)
ggplot2::mpg
p1 <- ggplot(data = mpg, aes(x = class, y = hwy)) +
geom_boxplot(fill = 'blue') +
labs(title = 'p1')
p2 <- ggplot(data = mpg, aes(x = reorder(class, hwy, FUN = median),
y = hwy)
) +
geom_boxplot(fill = 'blue') +
labs(title = 'p2')
grid.arrange(p1,p2, nrow=1)
2 分组
ggplot()中aes()函数负责分配变量,
直接将aes()中的参数赋值为分组变量。
可生成 逻辑变量
进行分组
e.g. 以'car'包中的Salaries数据集为例
p1 <- ggplot(Salaries, aes(x=rank, y=salary, fill=sex))+
geom_boxplot()
p2 <- ggplot(Salaries, aes(x=rank, y=salary, fill= sex=='Male'))+
geom_boxplot()
# 进行多图展示
install.packages("gridExtra")
library(gridExtra)
grid.arrange(p1,p2, nrow=1)
比较
ggplot2::mpg
p1 <- ggplot(data = mpg, aes(x=displ, y=hwy))+
geom_point()+
geom_smooth()+
labs(title = 'p1')
p2 <- ggplot(data = mpg, aes(x=displ, y=hwy))+
geom_point()+
geom_smooth(aes(group=drv))+
labs(title = 'p2')
p3 <- ggplot(data = mpg, aes(x=displ, y=hwy, color=drv))+
geom_point()+
geom_smooth(se=FALSE)+
labs(title = 'p3')
p4 <- ggplot(data = mpg, aes(x=displ, y=hwy))+
geom_point(aes(color= drv))+
geom_smooth(se=FALSE)+
labs(title = 'p4')
p5 <- ggplot(data = mpg, aes(x=displ, y=hwy))+
geom_point(aes(color=drv))+
geom_smooth(aes(linetype=drv))+
labs(title = 'p5')
p6 <- ggplot(data = mpg, aes(x=displ, y=hwy, color=drv))+
geom_point()+
labs(title = 'p6')
library(gridExtra)
grid.arrange(p1,p2,p3,p4,p5,p6, nrow=2)
3 刻面
使得不同组在一幅图中并排出现
facet_wrap() 和 facet_grid() 函数
语法 | 结果 |
---|---|
facet_wrap(~var, ncol=n) | 按var分组后水平排为n列 |
facet_wrap(~var, nrow=n) | 按var分组后水平排为n行 |
facet_grid(rowvar~colvar) | rowvar行,colvar列 (可设定两个分组变量) |
facet_grid(rowvar~. ) | 按 rowvar 分组,排成一列 |
facet_grid( .~colvar) | 按 colvar 分组,排成一行 |
e.g. 以'car'包中的Salaries数据集为例
ggplot(Salaries, aes(x=yrs.since.phd, y=salary, color=rank, shape=rank))+
geom_point()+
facet_grid(.~sex)
# facet_grid(.~sex) == facet_wrap(~sex, nrow=1)
4 添加平滑曲线
geom_smooth() 函数添加拟合曲线
参数 | 描述 |
---|---|
method | 使用的拟合函数模型(lm:线性, glm:广义线性, smooth:非参数光滑曲线, rlm:稳健线性, gam:广义相加模型) |
formula | 拟合函数使用的公式(y~x (默认), y~log(x), y~poly(x,n) (n次多项式拟合), y~ns(x,n)(n个自由度的样条拟合)) |
se | 置信区间(默认TRUE) |
level | 置信区间水平(默认95%) |
fullfigure | 拟合曲线覆盖全图(TRUE), 仅覆盖数据(FALSE), 默认FALSE |
e.g. 以'car'包中的Salaries数据集为例
ggplot(Salaries, aes(x=yrs.since.phd, y=salary, linetype=sex, shape=sex, color=sex))+
geom_smooth(method=lm, formula=y~poly(x,2), se=F, size=1)+
geom_point(size=2)
5 更改图形外观
5.1 坐标轴
连续型(数值):scale_x_continuous(breaks=, labels=, limits=)
不连续型(字符):scale_x_discrete(breaks=, labels=, limits=)
breaks: 指定刻度标记
labels: 指定标签
limits: 显示范围
coord_flip(): 颠倒坐标轴
coord_polar(): 使用极坐标系(鸡冠花图)
coord_fixed(): 固定横纵轴的增长比例 ,默认1:1
e.g. 以'car'包中的Salaries数据集为例
ggplot(Salaries, aes(x=rank, y=salary, fill=sex))+
geom_boxplot() +
scale_x_discrete(breaks=c("AsstProf", "AssocProf", "Prof"),
labels=c("assistant\nprofessor",
"associate\nprofessor",
"professor")) +
scale_y_continuous(breaks = c(50000, 100000, 150000, 200000),
labels = c("50K", "100K", "150K", "200K")) +
labs(tittle= "Faculty salary by rank and sex", x="", y="")
5.2 调整分组显示(标尺)
通过调整颜色从而进行可视化,可应用到离散和连续型变量
scale_color_manual(values=c("colr1","colr2")) 或
scale_color_brewer(palette="SetX") 函数指定颜色 (color或fill)
e.g. 以'car'包中的Salaries数据集为例
ggplot(data=Salaries, aes(x=yrs.since.phd, y=salary, color=rank)) +
scale_color_manual(values = c("orange", "olivedrab", "navy")) +
geom_point(size=2)
# 查看所有颜色集
library(RColorBrewer)
display.brewer.all()
# 或通过如下指令更改填充颜色
scale_fill_manual(values = "colr1", "colr2")
scale_fill_brewer(palette = "SetX")
5.3 主题
通过 theme() 函数设置图形的整体外观
e.g. 以'car'包中的Salaries数据集为例
# 使用theme()函数设置主题
mytheme <- theme(plot.title = element_text(face = "bold.italic",
size = "14", color = "black"),
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"
)
# 在函数中声明 +mytheme
ggplot(Salaries, aes(x=rank, y=salary, fill=sex))+
geom_boxplot() +
labs(title = "Salary by rank and sex", x="Rank", y="Salary") +
mytheme
5.4 多图
使用 "gridExtra" 包进行多个图形的合并
e.g. 以'car'包中的Salaries数据集为例
install.packages("gridExtra")
library(gridExtra)
p1 <- ggplot(Salaries, aes(x=rank)) + geom_bar()
p2 <- ggplot(Salaries, aes(x=sex)) + geom_bar()
p3 <- ggplot(Salaries, aes(x=yrs.since.phd, y=salary)) + geom_point()
grid.arrange(p1,p2,p3, ncol=3)