【R分享|实战】科白君浅谈ggplot2包学习逻辑

 量变学习,过程深思,总结完善,突破创新。”   --科白君
"R分享实战"专刊·第11篇
  编辑 | 科白维尼
  2671字 | 7分钟阅读
本期推文内容
众所周知,与Python相比,R语言更擅长绘图。ggplot2作为R语言绘图最精彩的包,相信大家也有所耳闻。相比于plot函数,ggplot函数更适合新手学习。ggplot不仅可以满足大家的绘图需求,而且可以描绘各式各样优美的图形。然而,ggplot的学习对不少小白来说仍有一定难度。实际上,ggplot描绘不同图形的画图思路是一致的,只要掌握了所绘图形所需要用的参数和函数,再利用"套路思维"完成即可。这里给大家做了简单的总结,同时以柱状图/条形图为例,与大家分享绘图逻辑。
首先推荐一个网址The R Graph Gallery – Help and inspiration for R charts (r-graph-gallery.com)
下图是该网址的主页,包括大约50种图及其对应代码,大家可以收藏学习。同时,网站的所有代码都可以复现,相信这能给大家在绘图时提供了一定帮助。
01

ggplot2包常用的函数介绍

与base包中plot函数相比,ggplot2包中ggplot函数作图是规律可循的。首先,ggplot作图结果满足期刊出版(可绘制高质量高分辨率的图);其次,既可绘制常见种类的图形,也可将不同图形种类组合在一起,或者设计新颖的图形。而plot函数对于新手来说相对较难,也不太支持设计新颖图形等。ggplot的绘图逻辑有点像ps,为什么这么说? 因为ggplot的绘图时存在类"图层"概念。首先,将基础的图形先铺垫好,然后往上一层一层叠加图层,直至满足需求。所以使用ggplot函数绘图时需要用到大量的加号"+",这是ggplot绘图的底层逻辑。因此,想绘图及美化一张图,就需要针对图中不同元素的函数和参数进行学习。
(1) ggplot2图层元素基本介绍
数据(data):可视化的数据
映射(mapping):数据的变量
几何对象(geom):如point散点图等
标度(scale):变量以什么形状、颜色映射到图形中
统计变换(stats):对数据计算
分面(facet):根据数据变量拆开,分层画图
主题(theme):根据需求对图进行"精雕细琢"
注释 (annotate): 对图形增加文字类的注释

(2) 第一层:ggplot () 图层 

ggplot ()图层包括数据和映射。这是画图的基础,正如立个背景(画布)。例如,ggplot (data = xx, mapping = aes(x, y) 等等


(3) 第二层:geom_xx () 图层 

该图层主要绘制所需图形类型,当ggplot () 描述了data和mapping后,geom这层就可以不用再写这部分内容,直接描述例如该图形的形状、大小、颜色等等。常见包括以下图形:

geom_point () 散点图

geom_bar () 柱状图

geom_line () 折线图

geom_boxplot () 箱线图

geom_violin () 小提琴图

geom_histogram () 直方图

geom_density () 概率密度图
其实,绘图到这两层已经把图画出来了。后续的其他元素,是根据自己的需求不断的完善和美化。这里就不再一一赘述了,我用一个柱状图的例子来展示ggplot2的魅力。
02

ggplot2绘制柱状图/条形图

考虑到散点图前几期已经与大家分享过,就挑选一个常见的图形(柱状图/条形图)作为例子给大家讲讲绘图思路。根据上面描述的基本元素,我们一步一步绘制:

第一、二层:包含数据data  映射mapping  几何对象geom

library(ggplot2) #加载R包
data("mtcars") #自带数据集
head(mtcars) #查看该数据集前6行
ggplot(data=mtcars, aes(x = as.factor(cyl), y = mpg))+
  geom_bar(stat = "identity")
#ggplot() 先描述数据对象,然后映射数据中x 和 y的对应变量。
#geom_bar() 画柱状图。如果设置stat="identity",这意味着条形的高度表示数据数据的值,而数据的值是由aes ()函数的y参数决定的,就是说,把值映射到y,所以,当设置stat="identity"时,必须设置映射函数中的y参数,把它映射到数值变量。

结果如图:

这里强调一点:大家可以看到设定x对象为cyl,用了as.factor()函数,这表示将4,6,8作为三个因子。如果我们直接用x=cyl将是另一个结果,因为cyl的具体结果为数值型数据。因此,当遇到数值型作为x轴时,大家需要考虑清楚是否需要将其转化为因子型。

后续图层的代码讲解如下:包含标尺scale 分面facet 主题theme,其余的代码学习逻辑与这几个元素一样。

最主要对不懂的函数寻求帮助,最重要的事情说三遍:看对应help中examples,看对应help中的examples,看对应help中的examples。

ggplot(data=mtcars, aes(x = as.factor(cyl), y = disp, fill = as.factor(gear)))+
#fill这里是对gear这个变量进行分组,如果不用as.factor函数,则颜色会根据数值的变化展现出渐进色变化。
  geom_bar(stat = "identity")+
  scale_y_continuous(limits = c(0,500))+ #对y轴进行范围设定
  facet_grid(~gear)+ #根据gear进行分面 命令写法为~xx
  theme_bw()+ #将灰色背景设置为白色
  theme(legend.title = element_blank())+ #去掉图例的标题 element_blank 表示空白
  labs(x="cyl") #对x轴标题进行修改

结果如图:

这是对gear不设定as.factor,结果差异非常明显。

作者唠叨:经过简单的总结,希望能给大家利用ggplot2绘图时提供帮助。最重要的是:需要大家保持一个绘图思路/逻辑,ggplot2就是一层又一层的覆盖,最终形成一张让人赏心悦目的图。如果大家遇到问题欢迎留言~
好书推荐
R语言实战(第三版):主要完善了优化绘图等内容
欢迎大家进群学习和交流R语言问题~
(0)

相关推荐