第五部分第19章使用ggplot2进行高级绘图

"学习做图还是以实践为主,因此写好脚本的代码结合笔记梳理思路。这里笔记比较简略。"

19.1 R中四种图形系统

图形系统的载入

系统 基础安装中是否包含 是否需要显示加载
base Y N
grid Y Y
lattice Y Y
ggplot2 N Y

19.2 ggplot2包介绍

ggplot的图采用加号+函数串联起来创建。

library(ggplot2)
ggplot(data=mtcars, aes(x=wt,y=mpg))+
  geom_point()+
  labs(title = "Automobile Data", x="Weight", y="Miles Per Gallon")
ggplot(data=mtcars, aes(x=wt,y=mpg))+
  geom_point(pch=17,color="blue",size=2)+
  geom_smooth(method = "lm", color="red", linetype=2)+
  labs(title = "Automobile Data", x="Weight", y="Miles Per Gallon")
mtcars$am <- factor(mtcars$am, levels = c(0,1), labels=c("Automatic","Manual"))
mtcars$vs <- factor(mtcars$vs, levels = c(0,1), labels=c("V-Engine","Straight Engine"))
mtcars$cyl <- factor(mtcars$cyl)
ggplot(data=mtcars,aes(x=hp,y=mpg,shape=cyl,color=cyl))+
  geom_point(size=3)+
  facet_grid(am~vs)+
  labs(title="Automoblie Data by Engine Type", x="Horsepower",y="Miles Per Gallon")
  • ggplot()初始化图形并且指定要用到的数据来源(data)和变量(variable)。
  • aes()函数的功能:映射,指定每个变量扮演的角色。
  • geom()几何函数: 向图中添加了集合对象,包括点、线、条、箱线图和阴影区域。
  • lab()函数:可添加注释,如轴标签和标题。
  • pch=点的形状,size=点的大小,color=点的颜色,linetype=线的类型。
  • 分组:再一个图形中显示两组或多组观察结果。
  • 小面化:在单独、并排的图形上显示观察组。

19.3 用几何函数指定图的类型

常见几何函数

函数 添加 选项
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_hline() 水平线 color, alpha,linetype,size
geom_jitter() 抖动点 color, fill, alpha,shape
geom_line() 线图 colorvalpha, linetype, size
geom_point() 散点图 color, alpha, shape, size
geom_rug() 地毯图 color, side
geom_smooth() 拟合曲线 method, formula, color, fill, linetype, size
geom_text() 文字注解
geom_violin() 小提琴图 color, fill, alpha, linetype
geom_vline() 垂线 color, alpha, linetype, size

几何函数常见选项

选项 详述
color 对点、线和填充区域的边界着色
fill 对填充区域着色
alpha 颜色的透明度,从0-1
linetype 图案的线条,1=实线,2=虚线,3=点,4=点破折号,5=长破折号,6=双破折号
size 点的尺寸和线的宽度
shape 点的形状
position 绘制诸如条形图和点等对象的位置,条形图dodge=分组条形图并排,stacked=堆叠分组条形图,fill=垂直地堆叠分组条形图并规范其高度相等,点jitter=减少点重叠
binwidth 直方图的宽度
notch 方块图是否应为缺口
sides 地毯图的安置(b=底部,l=左部,t=顶部,r=右部,bl=左下部等)
width 箱线图的宽度

19.4 分组

在R中,组通常用分类变量的水平因子来定义。
分组是通过ggplot2图将一个或多个带有诸如形状、颜色、填充、尺寸和线类型的视觉特征的分组变量来完成的。

data("Salaries",package = "car")
ggplot(Salaries, aes(x=salary,fill=rank))+
  geom_density(alpha=.3)
ggplot(Salaries, aes(x=yrs.since.phd, y=salary, color=rank,shape=sex))+
  geom_point()
ggplot(Salaries, aes(x=rank, fill=sex))+
  geom_bar(position = "stack")+labs(title='position="stack"')
ggplot(Salaries, aes(x=rank,fill=sex))+
  geom_bar(position="dodge")+labs(title='position="dodge"')
ggplot(Salaries, aes(x=rank,fill=sex))+
  geom_bar(position="fill")+labs(title='position="fill"')


19.5 刻面

ggplot2的刻面图函数

语法 结果
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水平的独立图,配置成一个单行

19.6 添加光滑曲线

geom_smooth()函数来添加一系列的平滑曲线和置信区域。

选项 描述
method= 使用平滑函数,lm,glm,smooth,rlm,gam
formula y~x(默认), y~log(x), y~poly(x,n)
se 绘制置信区间
level 使用的置信区间水平(默认95%)
fullrange 指定拟合应涵盖全图或仅仅是数据

19.7 修改ggplot2图形的外观

19.7.1 坐标轴

控制坐标轴和刻度线外观的函数

函数 选项
scale_x_continuous breaks=指定刻度标记,labels=指定刻度标记标签,limits=控制要展示的值的范围
scale_y_continuous
scale_x_discrete breaks=对因子的水平进行放置和排序,labels=指定这些水平的标签,limits=表示哪些水平应该展示
scale_y_discrete
coord_flip() 颠倒x轴和y轴

19.7.2 图例

图例是指出如何用颜色、形状、尺寸等视觉特性表示数据特征的指南。

19.7.3 标尺

使用标尺把数据空间的观察值映射到可视化的空间中。

19.7.4 主题

theme()函数可以调整字体、背景、颜色和网格线等。
主题可以使用一次,也可以保存起来应用到多个图中。

19.7.5 多重图

图形参数mfrow和基本函数layout()把两个或更多的基本图放到单个图形,但在刚ggplot2包中不适用。

ggplot2使用gridExtra包中的grid.arrange()函数,需事先安装。

install.packages("gridExtra")
library(gridExtra)
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()
grid.arrange(p1,p2,p3, ncol=3)

19.8 保存图形

ggsave()函数保存图形

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

19.9 小结

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