R-ggplot2

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)
reorder() 排列变量

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)
多重图

你可能感兴趣的:(R-ggplot2)