R语言绘图——数据可视化ggplot2 介绍和主要的参数

R 有几种用于制作图形的系统,但 ggplot2 是最优雅和最通用的系统之一。与大多数其他图形包不同,ggplot2 具有基于图形语法的底层语法,它允许您通过组合独立组件来组合图形。如果想要更加了解ggplot2,请阅读ggplot2: Elegant Graphics for Data Analysis,可以从https://ggplot2-book.org/getting-started.html学习本书

介绍

所有的图都由数据data,想要可视化的信息,映射mapping(即数据变量如何映射到美学属性的描述)组成

有五个映射组件: 以下我们详细描述各组件添加的参数

1.图层(layers)是几何元素和统计变换的集合。几何对象,简称geoms,代表你在图中实际看到的东西:点、线、多边形等等。 统计转换,简称stats,总结数据:例如,装箱和计数观察,以创建一个直方图,或拟合一个线性模型。

2.Scales将数据空间中的值映射到美学空间中的值。这包括颜色、形状和大小的使用。Scale还绘制图例和轴,这使得从图中读取原始数据值成为可能(反向映射)。

3.坐标(coords)或坐标系统描述如何将数据坐标映射到图形的平面。它还提供了轴和网格线来帮助读取图形。我们通常使用笛卡尔坐标系,但也可以使用其他一些坐标系,包括极坐标和地图投影。

4.刻面(facet)指定如何拆分数据子集并将其显示为小倍数。这也被称为条件反射或网格/格子。

5.theme控制更精细的显示点,如字体大小和背景颜色。

ggplot2的参数(分别从图层,scale,坐标,facet和theme介绍)

ggplot2有许多参数,可根据需求自行选取,具体参数详情可见https://ggplot2.tidyverse.org/reference/index.html

基础绘图:由ggplot(data,aes(x,y))+geom_开始,至少包含这三个组件,可以通过"+"不断的添加layers, scales, coords和facets。

(1)图层(layers)

Geoms:几何对象,通常,您将使用geom_函数创建层,以下为常用的图形:
geom_bar() :直方图,条形图
geom_boxplot():box图
geom_density():平滑密度估计曲线
geom_dotplot():点图
geom_point():点图
geom_violin():小提琴图

> library(ggplot2)
> mpg
# A tibble: 234 x 11
   manufacturer model    displ  year   cyl trans   drv     cty   hwy fl    class
   <chr>        <chr>    <dbl> <int> <int> <chr>   <chr> <int> <int> <chr> <chr>
 1 audi         a4         1.8  1999     4 auto(l… f        18    29 p     comp…
 2 audi         a4         1.8  1999     4 manual… f        21    29 p     comp…
 3 audi         a4         2    2008     4 manual… f        20    31 p     comp…
 4 audi         a4         2    2008     4 auto(a… f        21    30 p     comp…
 5 audi         a4         2.8  1999     6 auto(l… f        16    26 p     comp…
 6 audi         a4         2.8  1999     6 manual… f        18    26 p     comp…
 7 audi         a4         3.1  2008     6 auto(a… f        18    27 p     comp…
 8 audi         a4 quat…   1.8  1999     4 manual… 4        18    26 p     comp…
 9 audi         a4 quat…   1.8  1999     4 auto(l… 4        16    25 p     comp…
10 audi         a4 quat…   2    2008     4 manual… 4        20    28 p     comp…
# … with 224 more rows
> ggplot(mpg, aes(x = displ, y = hwy)) + 
     geom_point() #点图
1.jpg

aes(),颜色、大小、形状和其他审美属性
要向绘图添加其他变量,我们可以使用其他美学,如颜色、形状和大小。
按照属性定义
它们的工作方式与xy相同,aes():
aes(displ, hwy, colour = class) #按照某个属性着色
aes(displ, hwy, shape = drv) #按照某个属性定义
aes(displ, hwy, size = cyl) #按照某个属性定义

> ggplot(mpg, aes(x = displ, y = hwy,colour = class)) + 
  geom_point()
2.jpg

整体自定义
geom_xxx(colour =自定义颜色)
geom_xxx(shape=形状编号)
geom_xxx(size =编号大小定义 0-10)

注意根据需求按照aes()还是geom进行添加属性

以下为R语言中各shape形状编号


6.jpg
> ggplot(mpg, aes(displ, hwy)) + geom_point(colour = "blue") #把所有点定义为blue

3.jpg
> ggplot(mpg, aes(displ, hwy,colour=hwy)) +
  geom_point(shape=3)
7.jpg

(2)scale

scale控制如何将数据值转换为视觉属性的细节。
labs()和lims()是对标签和限制进行最常见调整。

labs() ,主要对图形进行调整,注释等
labs()括号内参数:title主标题,subtitle副标题,caption右下角描述,tag左上角
xlab() ,x轴命名
ylab() ,y轴命名
ggtitle() ,标题

> ggplot(mpg, aes(displ, hwy)) +
  geom_point()+
  labs(title="TILTLE",subtitle="sub",caption="the caption",tag="A")+
  xlab("XXX")+  #横坐标命名
  ylab("YYY")   #纵坐标命名

4.jpg

lims()
xlim(), xlim(a,b) 限制坐标(a,b)
ylim() , ylim(a,b) 限制坐标(a,b)

>ggplot(mpg, aes(displ, hwy)) +
  geom_point()+
  labs(title="TILTLE",subtitle="sub",caption="the caption",tag="A")+
  xlab("XXX")+  #横坐标命名
  ylab("YYY")+   #纵坐标命名
  xlim(0,8)+
  ylim(0,60)
5.jpg

scale_alpha() 透明度尺度
scale_shape()搭配aes(shape=某个属性)使用
参数:name ,solid =T/F是否填充

>  ggplot(mpg, aes(displ, hwy,shape=drv,colour=drv)) +
  geom_point()+
  labs(title="TILTLE",subtitle="sub",caption="the caption",tag="A")+
  xlab("XXX")+  #横坐标命名
  ylab("YYY")+   #纵坐标命名
  xlim(0,8)+
  ylim(0,60)+
  scale_shape(name="shape",solid = TRUE)
  
8.jpg

scale_size() 搭配aes(size=某个属性)使用
参数:name,range =c(0, 10)

>  ggplot(mpg, aes(displ,hwy,size=hwy,colour=drv)) +
  geom_point()+
  labs(title="TILTLE",subtitle="sub",caption="the caption",tag="A")+
  xlab("XXX")+  #横坐标命名
  ylab("YYY")+   #纵坐标命名
  xlim(0,8)+
  ylim(0,60)+
  scale_size(name="SIZE",range=c(0,3))
9.jpg

在ggplot2中有几种参数设置颜色:

1.适用于发散和定性的数据

a.scale_colour_brewer(),scale_colour_brewer(palette =" "),scale_colour_brewer(palette ="Green ")

palette来自RcolorBrewer包,所有面板:


10.jpg
>  ggplot(mpg, aes(displ, hwy,colour=drv))+  ##drv是一种定性尺度
  geom_point()+
  scale_colour_brewer(palette = "Set1")
11.jpg

b.scale_colour_manual()
scale_colour_manual(values=c( )) 可以自定义颜色,常用的参数
values可直接定义颜色,但是建议使用命名向量,例如
values=c("8" = "red", "4" = "blue", "6" = "darkgreen", "10" = "orange")

PS:注意在aes(colour=factor()),一定要把因素转换为factor型,否则无效

ggplot(mpg, aes(displ,hwy,colour = factor(drv)))+
  geom_point()+
  scale_colour_manual(values = c("red", "blue", "green"))

17.jpg

2.适用于连续的值,渐变颜色
a.scale_colour_gradient()
scale_colour_gradient (low =" ",high=" "),根据值大小定义颜色,创建两个颜色梯度(低-高),

>  ggplot(mpg, aes(displ, hwy,colour=displ))+
  geom_point()+
  scale_colour_gradient(low = "green", high = "black")
14.jpg

b.scale_colour_gradient2()
scale_colour_gradient2(low = " ",mid = " ",high = " ")创建一个发散的颜色梯度(低-中-高)

>  df <- data.frame(
x = runif(100),
y = runif(100),
z = rnorm(100)
)

>  ggplot(df, aes(x, y,colour = z)) +
  geom_point()+
  scale_colour_gradient2(low = "green",,mid = "white",high = "black")
15.jpg

c.scale_colour_gradientn()
创建一个n色渐变,scale_colour_gradientn(colours =许多R语言中的颜色面板),

>  ggplot(mpg, aes(displ, hwy,colour=displ))+  ##displ是连续的值
  geom_point()+
  scale_colour_gradientn(colours = terrain.colors(10))
13.jpg

3.coords坐标

默认坐标系是笛卡尔coord_cartesian()
一般不会修改

4.facet,把不同的因素分成不同的面,每个显示不同的数据子集

facet_grid(),在网格中布置面板
facet_grid(rows = vars() ) ;cols或rows = vars(因素),图形按列或行分割

ggplot(mpg, aes(displ, cty)) + 
 geom_point()+
 facet_grid(rows = vars(drv))
18.jpg

facet_wrap()
facet_wrap(vars( ), ncol =n) , ncol或者nrow,分为多少行多少列

>  ggplot(mpg, aes(displ, cty)) + 
 geom_point()+
 facet_wrap(vars(drv), ncol =2)
19.jpg

5.theme

theme_bw(),可以覆盖所有主题,背景变为白色,我们在文章中所用的图片大都需要该背景。
或者用theme_classic(),同时去除了网格线

>  ggplot(mpg, aes(displ, cty)) + 
 geom_point()+
 theme_bw()
20.jpg
>  ggplot(mpg, aes(displ, cty)) + 
 geom_point()+
  theme_classic()
21.jpg

theme(),修改主题的组件,里面涉及多个参数,根据需求调整

常见参数:
legend.position,图例的位置,包括 "left" 左, "right" 右, "bottom" 下, "top" 上和"none",不显示

ggplot(mpg, aes(displ, cty,colour= factor(drv))) + 
 geom_point()+
  theme_classic()+
  theme(legend.position = "left")
22.jpg
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念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

推荐阅读更多精彩内容