【R语言-ggplot2入门学习教程-全面概览】

ggplot2 学习

前言

在R in action 第2版中有对这个绘图包的简单介绍,可以画出一些初步的图,并且对这个包有系统的了解,内容比较全面,基本可以满足常见的绘图需求。冲冲冲!之后再深入细节,参考官方文档、书籍、以及其它人的经验等,画出更好看的图。

例子与基本语法

首先一个简单的例子:(前提,先安装一下ggplot2)

library(ggplot2)
ggplot(data = mtcars,aes(x = wt,y = mpg))+
  geom_point()+
  labs(title = "plot1",x = "weight",y = "miles per gallon")

得到一张比较原始的图:
【R语言-ggplot2入门学习教程-全面概览】_第1张图片
ggplot() 用来初始化图形,并且指定数据来源和变量,aes()是用来指定每个变量扮演的角色,最基本的就是指定一下x,y轴啦,比如变量wt的值映射沿x轴的距离。但是这里的设置并没有视觉输出,加点的函数在第二行,创建了一个散点图。
几何函数:向图中添加几何对象,比如例子中的geom_point(),都是以geom_开头的一系列函数,包括点、线、条、箱线图等。
添加注释 例子中的labs,可以添加标题和轴标签。
每一个函数都有许多自己的参数,然后把每个函数设置的都用+连接起来,越后边的设置,就越上边,有点像图层的叠加,把每种类型参数的设置都分开,有点抽象,多试试可能就更理解了吧。
设置更多的参数,能画出更多想要的效果。

1.几何函数 - 图的类型

有很多种几何函数,比较常见的有:

  • geom_bar() : 条形图
  • geom_boxplot() : 箱线图
  • geom_density() : 密度图
  • geom_histogram() : 直方图,仅需指定x轴,记录其频数。
  • geom_hline() : 水平线
  • geom_vline() : 垂直线
  • geom_jitter() : 抖动点
  • geom_line() : 线图
  • geom_point() : 散点图
  • geom_rug() : 地毯图,??好奇
  • geom_smooth() : 拟合曲线
  • geom_text() : 文字注解
  • geom_violin() : 小提琴图
    几何函数常见的参数,点、线颜色和类型等等。
  • color 点、线、填充区域的边界颜色
  • fill 填充区颜色,比如条形、密度等
  • alpha 颜色透明度,0(完全透明)~1(不透明)
  • linetype 线形,有六种,1-6
  • size 点的尺寸和线的宽度
  • shape 点的形状,和pch类型相同
  • positon 位置,如:"dodog"将分组条形图并排,"stacked"分组条形图的堆叠,“fill” 垂直的堆叠分组条形图并规范其高度相等,"jitter"抖动,减少点的重叠。
  • binwidth 直方图宽度
  • notch 方块是否应为缺口(T/F)
  • side 地毯图的位置,“b” “l” “t” “R” “bl” 分别表示,底部、左边、顶部、右边、左下。
  • width 箱线图的宽度
    来用一用这些函数:
mtcars$vs_f<-factor(mtcars$vs,levels = c(0,1),labels = c("vs_0","vs_1"))#把数字变成因子
ggplot(mtcars,aes(x = vs_f,y = drat))+
  geom_jitter(color = "blue",size = 1.5,shape = 16,alpha = 0.8)+ #抖动点不聚在一块
  geom_boxplot(color = "black",alpha = 0.5)+
  geom_rug(side = "l",color = "blue")

【R语言-ggplot2入门学习教程-全面概览】_第2张图片
密度图:

ggplot(data = mtcars,aes(x = drat,fill = vs_f))+#在aes里设置分组,自动产生图例
  geom_density(alpha = 0.5)+
  theme_classic()#改一个背景,灰色的好丑

【R语言-ggplot2入门学习教程-全面概览】_第3张图片

2.分组 - aes()

上述的几个图其实也用到了分组,可以发现都是在aes() 中设置,变量应该设置在aes内,常数设置在它外头的其它函数中。前提是这些分组的变量都是因子类型,在图中还会自动给出图例,图例中的颜色、点的类型都是自动给出的,之后会讲到如何手动调整到自己想要的。
试一下分组散点图:

mtcars$am_f<-factor(mtcars$am,levels = c(0,1),labels = c("am_0",'am_1'))
ggplot(data = mtcars,aes(x = wt,y = mpg,col = vs_f,shape = am_f))+
  geom_point()+
  theme_classic()

【R语言-ggplot2入门学习教程-全面概览】_第4张图片

3.分面 - 刻面图

一个图变成多个并列的图,刻面图函数有:

  • 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水平的独立图,配置成一个单行。
#分面
ggplot(data = mtcars,aes(x = wt,y = mpg))+
  geom_point()+
  facet_grid(am_f ~ vs_f)

【R语言-ggplot2入门学习教程-全面概览】_第5张图片

#分组分面结合
ggplot(data = mtcars,aes(x = wt,y = mpg,col = vs_f))+
  geom_point()+
  facet_wrap(~ am_f,ncol = 2)

【R语言-ggplot2入门学习教程-全面概览】_第6张图片

4.添加光滑曲线

添加一些拟合线的函数为geom_smooth()
参数有:

  • method = 使用的平滑函数,包括:lm-线性拟合;glm-广义线性;smooth-loess;rlm-稳健线性;gam-广义相加模型。默认是smooth.
  • formula = 光滑函数中使用的公式,默认的话就是y ~ x,还有y ~ log(x),y ~ poly(x,n) n次多项式拟合,y ~ ns(x,n)具有n个自由度的样条拟合。
  • se 绘制置信区间,默认为TRUE。
  • level 使用的置信区间水平,默认0.95
  • fullrange 指定拟合应涵盖全图(T)仅数据(F),默认为F。
#添加光滑曲线
ggplot(data = mtcars,aes(x = wt,y = mpg,col = vs_f))+
  geom_point()+
  geom_smooth(method = lm,se = F)+#线性拟合,删掉灰色的置信区间。
  theme_classic()

【R语言-ggplot2入门学习教程-全面概览】_第7张图片

5.修改图形外观

坐标轴

在最开始的例子里,用了labs()来添加标题和修改轴标签,那有哪些自定义坐标轴的函数呢?针对连续变量和分组变量,有以下一些函数:

  • scale_x_continuous(),scale_y_continuous() :breaks = 指定刻度标记,labels = 指定刻度上要标记的标签,limits = 控制要展示值的范围。
  • scale_x_discrete(),scale_y_discrete():breaks = 对因子的水平进行放置和排序,labels = 指定标签,limits = 控制要展示哪些水平。
  • coord_flip() :颠倒x.y轴。

图例的修改和位置

labs()修改标题、xy轴标签、图例标题。theme()中的函数来调整图例的位置,具体见例子。

#编辑坐标轴、图例
ggplot(mtcars,aes(x = vs_f,y = mpg,fill = am_f))+
  geom_boxplot()+
  scale_x_discrete(breaks = c("vs_0","vs_1"),labels = c("vs = 0","vs = 1"))+#修改横坐标轴  
  labs(title = "boxplot of mpg",x = "",y = "Miles Per gallon",#把x轴标签去掉
       fill = "value of am")+#这个对应aes中的fill,修改图例的标题。
  theme(legend.position = c(0.2,0.8))#放图例的位置

【R语言-ggplot2入门学习教程-全面概览】_第8张图片
theme(legend.position = c(0.2,0.8))表示把图例放在距离左边20%、距离下边80%的地方。
还有点问题,一个是标题为啥不是居中,有点别扭,第二是图例中的图案、组名怎么修改呢?先保留一下问题。

标尺

用标尺把观测值映射到可视化的空间中,可以应用于连续变量,也可以应用于离散变量,那具体有什么用呢?在之前的例子中也用到了,在aes()函数中指定fill,color等,还可以指定size,在图像中呈现出更多信息。

#标尺
ggplot(mtcars,aes(x = wt,y = mpg,size = disp))+ #disp是一个连续变量哦
  geom_point(shape = 21,col = "black",fill = "pink")+
  labs(x = "Weight",y = "Miles per gallon",title = "Bubble chart",
       size = "Engine\nDisplacement")#这个是对应与aes中的,修改图例标题。

【R语言-ggplot2入门学习教程-全面概览】_第9张图片
这里的disp是一个连续变量,实现了把它的大小和圆圈大小联系起来,并且在图例中也自动分好了组和标签,这就是传说中的泡泡图。
我想了想,大小可以跟着连续变量变化,那深浅是不是也可以嘞,于是乎,我稍作改动。

ggplot(mtcars,aes(x = wt,y = mpg,size = disp,alpha = wt))+ #disp是一个连续变量
  geom_point(shape = 21,col = "black",fill = "red")+
  labs(x = "Weight",y = "Miles per gallon",title = "Bubble chart",
       size = "Engine\nDisplacement")#这个是对应与aes中的,修改图例标题。

【R语言-ggplot2入门学习教程-全面概览】_第10张图片
虽然在这个图里这个深浅是没什么必要,因为很坐标上标了,不过在其它图中说不定是很有用的。

ggplot(data = mtcars,aes(x = drat,y = disp, color = disp ))+
  geom_point(size = 2)

【R语言-ggplot2入门学习教程-全面概览】_第11张图片

多重图-图的组合

想把几个设置颜色的图组合在一块,顺便就学上这个图的组合。在R基础作图中,可以使用par(),layout(),在ggplot2中不行,需要下载安装一个gridExtra包。使用grid.arrange()函数。

install.packages("gridExtra")
library(gridExtra)
p1<-ggplot(data = mtcars,aes(x = drat,y = disp, color = vs_f ))+
  scale_color_manual(values = c("orange","blue"))+#手动设置颜色之直接写名字
  geom_point(size = 2)+
  theme_classic()
p2<-ggplot(data = mtcars,aes(x = drat,y = disp, color = vs_f ))+
  scale_color_brewer(palette = "Set1")+#手动设置颜色之直接写名字
  geom_point(size = 2)+
  theme_classic()
p3<-grid.arrange(p1,p2,ncol = 2)
ggsave(file = "D:/R_demo/ggplot2/12.23_11.jpg",plot = p3,width = 10,height = 4)
#如果不指定plot,就是最近的那幅图。

【R语言-ggplot2入门学习教程-全面概览】_第12张图片

图形的保存

上述例子中用到了,使用ggsave()函数,参数见上述示例。

主题设置

theme()函数中的选项可以调整字体、背景、颜色、网格线等等,可以使用一次,也可以保存起来应用到多个图中,之前的例子中也有用到包里默认的一些主题背景。
看一下默认有的一些主题:
【R语言-ggplot2入门学习教程-全面概览】_第13张图片
主题的修改或者自己设计该怎么做呢?
参数一大堆嗷,最好就是自己有什么需要,help,找一下对应的修改函数,而且有示例文档。
这里和theme配套的语法,有element_XXX
我理解格式是这样的:
theme(图里位置.元素类型(具体参数))
帮助文档原文:
In conjunction with the theme system, the element_ functions specify the display of how non-data components of the plot are drawn.

element_blank: draws nothing, and assigns no space.

element_rect: borders and backgrounds.注意这个是数据之外的背景,包含标题,标签等。

element_line: lines.

element_text: text.

rel() is used to specify sizes relative to the parent, margin() is used to specify the margins of elements.

然后element_XXX()函数下面也有很多参数,查看帮助文档比较方便。
我只能说实在是有太多参数了,而且图又那么多,还是之后有空再整理一下看看吧,之后仔细学一下主题的设置,还有与ggplot2相关的一些包的使用、各类具体图形的画法。

结语

写了大半天嘞,如果这份学习笔记对你有帮助,那就:

点赞 ! 收藏~

你可能感兴趣的:(#,r语言,开发语言)