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)
多重图
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容