一文读懂ggplot2数据可视化

1.前言

ggplot2是数据可视化的重要程序包,用于绘制各种高级统计图形。该程序包是新西兰统计学家Hadley Wickham在2005年左右开发的,那时候作者还是美国Iowa大学的博士生。

1.1 ggplot2的命令是一种用R实现的绘图语言

ggplot2的代码相对容易理解,设定各种参数较为方便,图形也十分美观,能用相对简单的代码在图形中呈现出非常丰富的信息。不过,ggplot2的语法与传统R函数的调用方式有很大差别,所以不少人反映学起来有些困难。

在ggplot2出现以前,R绘图都是调用函数,再通过改变函数的参数实现的。ggplot2将所绘制图形的各部分独立出来,如xy坐标,基本组件的颜色、图标大小、填充类型、堆叠方式、坐标轴、地图投影、数据分组、图形分面等等信息划归为一些基本类型,每一部分分别用一段代码表示。每段代码内部有相应的参数控制,各代码段再通过“+”运算符连接。这里的“+”并非四则运算的加法,而是表示图形各要素/组件之间的叠加。“+”运算符所连接的代码片段,有任何一部分做出更改,整个图形就做出相应调整。因此,本质上,ggplot2代码是用R语言实现的一种绘图语言。

ggplot2所用的绘图语言,主要是按照Wilkinson(2005)的设想实现的。Wilkinson(2005)将一幅统计图形看做由以下几个主要部分:

  1.  数据;
    
  2.  表现数据的点、线、多边形、栅格、颜色等;
    
  3.  坐标系
    

1.2 ggplot2命令的基本组成

具体来讲,在ggplot2程序包中,每一副图都是由若干组件组成的,这些组件包括:

  •  `data`:     数据,必须为data.frame。
    
  •  `coordinate     system`:     数据可视化,主要是在二维平面上表示数据的关系,所用坐标系一般为平面直角坐标,有时会用到极坐标、地图投影等。ggplot2软件默认使用平面直角坐标。
    
  •  `geoms`:     包括geoms_开头的各种对象,用来绘制各种基本组件,包括点、线、面、多边形、柱状图、箱线图等。
    
  •  `aesthetics`:     图形的美学特征,如颜色、形状、透明度、大小、分组等。
    
  •  `scales`:     坐标轴的属性
    
  •  `stats`:     统计变换。用于设定数据要进行的统计转换,例如平均值、中位数、记录数等。
    
  •  `facets`:     描述如何将图形按照某一个或者几个因子(factors)不同水平(levels)用多个图形分开展示。
    

1.3 ggplot2要求输入数据为data.frame

ggplot2要求输入的数据为data.frame。为了将R中的各种数据转换为ggplot2能够读取和操作的data.frame格式,H. Wickham还开发了reshape2以及dplyr等程序包,专门用于数据转换。

1.4 ggplot2中的aes函数

完整的ggplot2绘图命令, 总是以ggplot() 开始。ggplot()及其参数奠定整个ggplot2图形的基础,最重要的两个参数为data和mapping。其中data必须为data.frame格式。mapping参数要求数据通过aes函数进一步转换。aes是aesthetic的缩写。在aes函数中,要输入的参数有x, y, group, color, size等。aes可以直接访问data参数所输入数据框的各列,从而直接控制图形的横坐标、纵坐标、分组以及各组的颜色、大小、透明度等等。

注意:在ggplot()代码部分设置的aes参数对于整个图形都有效。在某个geom组件内部设置的aes参数,如颜色、分组、字体大小、线段类型等,只对该geom组件有效。若要设定所有geom组件的形状、大小、颜色等,相应的参数如size, color等,不要放入aes函数转换,而是作为ggplot()函数的普通参数即可。

1.5 ggplot2的geom组件

ggplot()代码段只定义数据展示的逻辑关系,并不直接绘图。要用ggplot2绘图,还必须为其添加各种基本图形组件。要添加的图形组件根据变量的数目以及要绘制的图形有所不同,包括:点geom_point、线geom_line、多边形geom_polygon、箱线图geom_boxplot、柱状图geom_bar、六角形图geom_hex、栅格图geom_tile、阶梯线geom_step、拟合的趋势线geom_smooth等等。

为了对图形进行进一步修饰,还可能要更改图形的横坐标、纵坐标、标题等等。

1.6 ggplot2图形的显示

ggplot2所生成的对象,同时具有gg和ggplot两种属性。如果要显示图形,需要将其print到屏幕上,而不是像plot()函数一样直接调用函数就可以调用绘图设备(屏幕也是绘图设备)。与此同时,ggplot2的图形也不接受par()设定的各种参数。

本文就ggplot2的常用绘图组件做简要介绍。

2 快速绘图

2.1 qplot (不建议使用)

为了让只熟悉R基础绘图的用户也能使用ggplot2,H. Wickham编写了qplot函数,调用方式类似plot()。在qplot()中,所有控制图形的信息都封装为参数。但是qplot()在一定程度上降低了绘图的灵活性,难以体现ggplot2的优势,因此不太建议使用。

1
2
3
4
#### 载入数据
library(maps)
library(ggthemes)
library(ggplot2)

2.1.1 普通绘图

1
plot(hwy ~ cty, data = mpg)

2.1.2 qplot绘图

1
qplot(x = cty, y = hwy, color = cyl, data = mpg, geom = "point")

2.1.3 ggplot2绘图

1
2
3
4
5
6
7
8
9
10
ggplot(data = mpg, aes(x = cty, y = hwy)) + ### 设置x, y以及数据
geom_point(aes(color = cyl)) + ### 添加 点, 以及 设置 点 的颜色
geom_smooth(method = "lm") + ### 添加拟合曲线/曲线以及置信区间
coord_cartesian() + ### 笛卡尔坐标系, 即平面直角坐标系
scale_color_gradient() + ### 图例的颜色
theme_base() + ### 主题为base风格
scale_shape(solid = FALSE) + ### 点的类型为中空。
ggtitle("New Plot Title") + ### 标题
xlab("New X label") + ### 横轴
ylab("New Y label") ### 纵轴

3 基本绘图组件及其属性

3.1 多边形

1
2
3
thismap = map_data("world")
c <- ggplot(thismap, aes(long, lat, group=group))
c + geom_polygon(fill="white", colour="gray")

3.2 折线图

1
2
ggplot(economics, aes(date, unemploy)) +
geom_path(lineend = "butt", linejoin = "round", linemitre = 1)

3.3 带状图

1
2
ggplot(economics, aes(date, unemploy)) + 
geom_ribbon(aes(ymin = unemploy - 900, ymax = unemploy + 900))

3.4 线段

1
2
ggplot(seals, aes(x = long, y = lat)) + 
geom_segment(aes(xend = long + delta_long, yend = lat + delta_lat))

3.5 长方形

1
2
3
ggplot(seals, aes(x = long, y = lat)) + 
geom_rect(aes(xmin = long, ymin = lat,
xmax = long + delta_long, ymax = lat + delta_lat))

4 一维连续数据(向量)绘图

4.1 一维连续数据

1
a <- ggplot(mpg, aes(hwy))

4.2 频度阴影图

1
2
a + geom_area(stat = "bin")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

4.3 核密度图

1
a + geom_density(kernel = "gaussian")

4.4 点状频度图

1
2
a + geom_dotplot()
## `stat_bindot()` using `bins = 30`. Pick better value with `binwidth`.

4.5 频度折线图

1
2
a + geom_freqpoly()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

4.6 单变量离散数据

1
2
b <- ggplot(mpg, aes(fl))
b + geom_bar()

5 二维连续变量绘图

5.1 x和y均为连续变量

5.1.1 空白图形,只生成坐标

1
2
f <- ggplot(mpg, aes(cty, hwy))
f + geom_blank()

5.1.2 带随机扩散的散点图

1
f + geom_jitter()

5.1.3 散点图

1
f + geom_point()

5.1.4 分位数回归线

1
2
3
4
5
6
7
8
f + geom_quantile()
## Loading required package: SparseM
##
## Attaching package: 'SparseM'
## The following object is masked from 'package:base':
##
## backsolve
## Smoothing formula not specified. Using: y ~ x

5.1.5 xy轴投影

1
f + geom_rug(sides = "bl")

5.1.6 线性模型拟合以及置信区间

1
f + geom_smooth(method = "lm")

5.1.7 Loess拟合趋势线以及置信区间

1
2
f + geom_smooth(method = "auto")
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

5.2 x为离散变量,y为连续变量

5.2.1 柱状图

1
2
g <- ggplot(mpg, aes(class, hwy))
g + geom_bar(stat = "identity")

5.2.2 箱线图

1
g + geom_boxplot()

5.2.3 点图

1
2
g + geom_dotplot(binaxis = "y", stackdir = "center")
## `stat_bindot()` using `bins = 30`. Pick better value with `binwidth`.

5.2.4 小提琴图

1
g + geom_violin(scale = "area")

5.3 x为离散变量, y为离散变量

1
2
h <- ggplot(diamonds, aes(cut, color))
h + geom_jitter()

5.4 二维密度分布图

5.4.1 栅格图

1
2
3
data(iris)
i <- ggplot(iris, aes(Sepal.Length, Sepal.Width))
i + geom_bin2d(binwidth = c(5, 0.5))

5.4.2 等高线密度图

1
i + geom_density2d()

5.4.3 六角形密度图

1
i + geom_hex()

5.5 x轴为时间序列的连续变量

5.5.1 阴影图

1
2
j <- ggplot(economics, aes(date, unemploy))
j + geom_area()

5.5.2 折线图

1
j + geom_line()

5.5.3 阶梯图

1
j + geom_step(direction = "hv")

5.6 添加误差线

1
2
df <- data.frame(grp = c("A", "B"), fit = 4:5, se = 1:2)
k <- ggplot(df, aes(grp, fit, ymin = fit-se, ymax = fit+se))

5.6.1 误差箱图

1
k + geom_crossbar(fatten = 2)

5.6.2 误差线图(带横线)

1
k + geom_errorbar()

5.6.3 误差线图(不带横线)

1
k + geom_linerange()

5.6.4 带误差线的点图

1
k + geom_pointrange()

6 三维数据的可视化

1
2
seals$z <- with(seals, sqrt(delta_long^2 + delta_lat^2))
m <- ggplot(seals, aes(long, lat))

6.1 等高线图

1
m + geom_contour(aes(z = z))

6.2 栅格图

1
m + geom_raster(aes(fill = z), hjust=0.5, vjust=0.5, interpolate=FALSE)

6.3 瓦片图

1
m + geom_tile(aes(fill = z))

7 统计变换

1
2
a + geom_bar(stat = "bin")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

说明:stat_bin(geom = "bar")geom_bar(stat = "bin") 两者等价

7.1 一维概率密度统计变换参数的设定

1
a + stat_bin(binwidth = 1, boundary = 10)
1
a + stat_density(adjust = 1, kernel = "gaussian")

7.2 二维概率密度统计变换参数的设定

1
f + stat_bin2d(bins = 30, drop = TRUE)
1
f + stat_binhex(bins = 30)
1
f + stat_density2d(contour = TRUE, n = 100)

7.3 三维数据的统计变换参数设定

7.3.1 等高线图

1
m + stat_contour(aes(z = z))

7.3.2 线段图

1
m+ geom_spoke(aes(radius= z, angle = z))

7.3.3 六角形图

1
m + stat_summary_hex(aes(z = z), bins = 30, fun = mean)

7.3.4 栅格图

1
m + stat_summary_2d(aes(z = z), bins = 30, fun = mean)

7.4 组间比较

7.4.1 箱线图

1
g + stat_boxplot(coef = 1.5)

7.4.2 提琴图参数设定

1
g + stat_ydensity(adjust = 1, kernel = "gaussian", scale = "area")

7.4.3 累积曲线

1
f + stat_ecdf(n = 40)

7.4.4 分位数曲线图

1
f + geom_quantile(quantiles = c(0.25, 0.5, 0.75), formula = y ~ log(x), method = "rq")

7.4.5 Loess回归以及置信区间统计变换的参数设定

1
2
f + geom_smooth(method = "auto", formula = y ~ x, se = TRUE, n = 80, fullrange = FALSE, level = 0.95)
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

7.4.6 绘制dnorm的概率密度分布

1
ggplot() + stat_function(aes(x = -3:3), fun = dnorm, n = 101, args = list(sd=0.5))

7.4.7 绘制散点图

1
f + stat_identity()

7.4.8 绘制qq图

1
ggplot() + stat_qq(aes(sample=1:100), distribution = qt, dparams = list(df=5))

7.4.9 绘制散点图, 点的大小为该点数据出现的次数

1
f + stat_sum()

7.4.10 带误差线的点图

1
2
f + stat_summary(fun.data = "mean_cl_boot")
## Warning: Removed 3 rows containing missing values (geom_pointrange).

7.4.11 无重复散点图

1
f + stat_unique()

8 图例

ggplot2 的图例与图形是一个整体, 设定图例的参数, 图例会更改, 设定图形的参数, 图例会自动更改。scale 控制图形中的颜色,文字显示, 图例中的图形。

1
2
n <- b + geom_bar(aes(fill = fl))
n
1
2
3
4
5
6
##### 柱状图设定颜色, 各组名称, 图例中各组名, 类别划分
n + scale_fill_manual(
values = c("skyblue", "royalblue", "blue", "navy"),
limits = c("d", "e", "p", "r"),
breaks =c("d", "e", "p", "r"),
name = "fuel", labels = c("D", "E", "P", "R"))

8.1 坐标轴的控制

按照数据的类别, 分为

1
2
3
4
5
6
7
8
scale_x_continuous()
scale_x_discrete()
scale_x_identity()
scale_x_manual(values = c())
scale_y_continuous()
scale_y_discrete()
scale_y_identity()
scale_y_manual(values = c())

这几个函数的参数主要为:

  •  alpha,     透明度
    
  •  color,     颜色序列
    
  •  fill,     颜色序列
    
  •  linetype,     线段类型
    
  •  shape,     点的形状
    
  •  size,     点的大小
    

8.1.1 x轴显示日期

1
2
library(scales)
scale_x_date(labels = date_format("%m/%d"), breaks = date_breaks("2 weeks"))

8.1.2 x轴显示为日期和时间

1
scale_x_datetime()

8.1.3 x轴转换为以10为底的对数

1
scale_x_log10()

8.1.4 x轴逆向显示

1
scale_x_reverse()

8.1.5 x轴平方根变换

1
scale_x_sqrt()

9 颜色

颜色主要用来显示分组,或者数据的连续梯度变化。

9.1 颜色设定

在ggplot2中,可以通过scale_fill_brewer(palette = “”)函数,可以将色系调整为以下任何一种。

9.1.1 最大差异色系 Diverging

BrBG, PiYG, PRGn, PuOr, RdBu, RdGy, RdYlBu, RdYlGn, Spectral

9.1.2 离散色系 Qualitative

Accent, Dark2, Paired, Pastel1, Pastel2, Set1, Set2, Set3

9.1.3 序列色系 Sequential

Blues, BuGn, BuPu, GnBu, Greens, Greys, Oranges, OrRd, PuBu, PuBuGn, PuRd, Purples, RdPu, Reds, YlGn, YlGnBu, YlOrBr, YlOrRd

通过aes设定分组之后,如fill, color, group等,ggplot会自动设定颜色。点图、栅格图等连续变量,默认为深蓝色色系(“Diamond\nclarity”)。

调整图形颜色的函数还包括:

  •  `scale_colour_brewer`
    
  •  `scale_fill_brewer`
    
  •  `scale_colour_distiller`
    
  •  `scale_fill_distiller`
    
  •  `scale_colour_gradient`
    
  •  `scale_fill_gradient`
    
  •  `scale_colour_gradient2`
    
  •  `scale_fill_gradient2`
    
  •  `scale_colour_gradientn`
    
  •  `scale_fill_gradientn`
    
  •  `scale_colour_grey`
    
  •  `scale_fill_grey`
    
  •  `scale_colour_hue`
    
  •  `scale_fill_hue`
    

等多种,分别用来对画布中的点线面进行不同的填充设色等。

1
n <- b + geom_bar(aes(fill = fl))

9.1.4 R中调色板设置

1
n + scale_fill_brewer(palette = "Blues")
1
n + scale_fill_brewer(palette = "BrBG")

9.1.4.1 R中的灰色梯度显示柱状图

1
n + scale_fill_grey( start = 0.2, end = 0.8, na.value = "red")

9.1.4.2 通过 scale_fill_gradient显示颜色过渡

1
2
3
o <- a + geom_dotplot(aes(fill = ..x..)) 
o + scale_fill_gradient( low = "red", high = "yellow")
## `stat_bindot()` using `bins = 30`. Pick better value with `binwidth`.

9.1.4.3 通过scale_fill_gradient2显示颜色过渡

1
2
o + scale_fill_gradient2( low = "red", high = "blue", mid = "white", midpoint = 25 )
## `stat_bindot()` using `bins = 30`. Pick better value with `binwidth`.

9.1.4.4 选择颜色序列

1
2
o + scale_fill_gradientn(colours = terrain.colors(6) )
## `stat_bindot()` using `bins = 30`. Pick better value with `binwidth`.

其他可以选择的颜色: rainbow(), heat.colors(), topo.colors(), cm.colors(), RColorBrewer::brewer.pal()

10 形状

绘制散点图时,不同形状的点表示分组,ggplot2已经尽可能做了最优化处理。以保证各组点的形状都能做较好区分。如果要表示的分组数量太多,ggplot2会给出相应警告。

10.1 按照形状分组

10.1.1 点图标的选择

1
p <- f + geom_point(aes(shape = fl))

10.1.2 显示空心图标

1
p + scale_shape(solid = FALSE)

10.1.3 指定点图标

1
p + scale_shape_manual(values = c(3:7))

10.2 更改图标大小

1
2
#### 设定图标大小与变量的关系q <- f + geom_point(aes(size = cyl)) 
#### 设定图标大小的范围q + scale_size_area()

11 坐标系

每个图形,只能设定一个坐标系。默认情况下,ggplot2使用平面直角坐标系。用户可以指定使用极坐标coord_polar,也可以通过coord_trans,coord_flip等对坐标轴的刻度进行相应变换。

11.1 平面直角坐标系

1
2
r <- b + geom_bar()
r + coord_cartesian(xlim = c(0, 5))

11.2 横轴、纵轴以固定比例显示

1
r + coord_fixed(ratio = 1/2)

11.3 横轴纵轴调换

1
r + coord_flip()

11.4 极坐标, 适用于绘制饼图

1
r + coord_polar(theta = "x", direction=1 )

11.4.1 横轴、纵轴的变换,如 log, sqrt等

1
r + coord_trans(y = "sqrt")

11.5 设定坐标轴范围

1
2
3
4
t + coord_cartesian(xlim = c(0, 100), ylim = c(10, 20))
## NULL
t + xlim(0, 100) + ylim(10, 20)
## NULL

12 细节调整

12.1 柱状图的叠加以及比较

12.1.1 并排排列

1
2
s <- ggplot(mpg, aes(fl, fill = drv))
s + geom_bar(position = "dodge")

12.1.2 堆叠排列

1
s + geom_bar(position = "stack")

12.1.3 按百分比堆叠排列, 各柱子等高

1
s + geom_bar(position = "fill")

12.1.4 散点图的随机化

在每个点的x,y方向上都加上较小的随机值, 以便点能散开。

1
f + geom_point(position = "jitter")

13 绘图主题与风格

所谓主题,就是绘图的风格。通过设定图形的主题,可以生成各种风格的图形。

ggplot2自身提供了一些主题,如:

  •  `theme_grey()`
    
  •  `theme_gray()`
    
  •  `theme_bw()`
    
  •  `theme_linedraw()`
    
  •  `theme_light()`
    
  •  `theme_dark()`
    
  •  `theme_minimal()`
    
  •  `theme_classic()`
    
  •  `theme_void()`
    
  •  `theme_test()`
    
1
2
3
4
t <- ggplot(mpg, aes(cty, hwy)) + geom_point()
t + theme_grey()
t + theme_classic()
t + theme_minimal()

ggthemes程序包(https://jrnold.github.io/ggthemes/reference/index.html)提供了更多主题,加载后,即可与ggplot2混合使用)提供了更多主题,加载后,即可与提供了更多主题,加载后,即可与ggplot2混合使用)ggplot2混合使用提供了更多主题,加载后,即可与ggplot2混合使用)。

  •  `theme_base()`:     模拟plot()的风格
    
  •  `theme_calc()`:     LibreOffice     Calc风格
    
  •  `theme_economist()` :     经济学家杂志风格
    
  •  `theme_economist_white()`:     经济学家杂志
    
  •  `theme_excel()`:     微软Office     Excel传统风格
    
  •  `theme_excel_new()`:     微软Office     Excel最新风格
    
  •  `theme_few()`:Few’s     “Practical Rules for Using Color in Charts”
    
  •  `theme_fivethirtyeight()`:     Theme     inspired by fivethirtyeight.com plots
    
  •  `theme_foundation()`
    
  •  `theme_gdocs()` :     google文档风格
    
  •  `theme_hc()`:     Highcharts     Theme
    
  •  `theme_igray()`:     逆向灰色梯度风格
    
  •  `theme_map()`:     简约地图风格 Clean     theme for maps
    
  •  `theme_pander()` :     A     ggplot theme originated from the pander package
    
  •  `theme_par()`:     Theme     which uses the current ‘base’ graphics parameter values from     par(). Not all par() parameters, are supported, and not all are     relevant to ggplot2 themes.
    
  •  `theme_solarized()` `theme_solarized_2()`:     ggplot     color themes based on the Solarized palette
    
  •  `theme_solid()`:     Theme with nothing other than a background color
    
  •  `theme_stata()`:     Stata统计软件绘图风格
    
  •  `theme_tufte()`:Tufte     Maximal Data, Minimal Ink Theme
    
  •  `theme_wsj()`:华尔街日报风格     Wall     Street Journal theme
    

更多细节调整,可以查看theme()函数。

14 图形分面 facet

当要按照某一个因子的不同水平,将每个水平分别展示在不同的图形时,可以使用图形分面。例如,各省份GDP的逐年变化,可以按照年份绘制多个地图,每个小地图(分面)只展示该年份的GDP即可。

1
2
3
###按照因子组合绘制多图
t <- ggplot(mpg, aes(cty, hwy)) + geom_point()
t + facet_grid(. ~ fl) ### 按照列, 排列不同 fl
1
t + facet_grid(year ~ .)  ### 按照行, 排列不同 year
1
t + facet_grid(year ~ fl) ### 行为 year, 列为 fl
1
t + facet_wrap(~ fl)      #### 设定显示为几行几列, nrow = NULL, ncol = NULL
1
2
#### 每幅图小标题的显示
t + facet_grid(. ~ fl, labeller = label_both)
1
t + facet_grid(. ~ fl, labeller = label_bquote(alpha ^ .(x)))
1
t + facet_grid(. ~ fl, labeller = label_parsed)

15 标题和坐标轴

15.1 更改标题和坐标轴名称

默认情况下,ggplot2绘制的图形并没有标题,添加标题,可以用ggtitle函数。

1
t + ggtitle("New Plot Title")  ### 标题
1
t + xlab("New X label")        ### x轴标题
1
t + ylab("New Y label")        ### y轴标题
1
t + labs(title =" New title", x = "New x", y = "New y") ### 同时设定标题, xy轴标题

ggtitle添加的标题默认是向左排列的,要设置标题居中,则用theme函数。

1
2
t + ggtitle("New Plot Title")+
theme(plot.title = element_text(hjust = 0.5))

15.2 图例位置

1
2
3
t2 <- ggplot(mpg, aes(cty, hwy, color = trans)) + geom_point()
t2 + theme(legend.position = "bottom")
###"bottom", "top", "left", or "right"
1
t2 + guides(color = "none")
1
t2 + scale_fill_discrete(name = "Title", labels = c("A", "B", "C"))

15.3 添加标注

而在ggplot2中,使用的是annotate()。annotate可以添加,文字、多边形或者任何其他geom对象。

16 绘制地图

16.1 geom_map

1
2
3
4
5
6
7
8
data <- data.frame(murder = USArrests$Murder,
state = tolower(rownames(USArrests)))
map <- map_data("state")

l <- ggplot(data, aes(fill = murder))

l + geom_map( aes(map_id = state), map = map ) +
expand_limits( x = map$long, y = map$lat )

16.2 geom_polygon

1
2
3
4
5
6
7
### 地图投影变换
### see:
library(maps)
thismap = map_data("world")
ggplot(thismap, aes(long, lat, group=group)) +
geom_polygon(fill="white", colour="gray") +
coord_map(projection = "ortho", orientation=c(41, -74, 0))

16.3 geom_sf

ggplot2 程序包还可以支持sf程序包的对象,geo_sf系列函数可以较为方便地生成地图。

由于sf程序包的st_read, st_transform, st_as_sf提供了读取和转换空间数据的办法,因此通过sf读取和处理空间数据,用ggplot2进行可视化,不失为很好的选择。

1
2
3
4
5
stat_sf()
geom_sf()
geom_sf_label()
geom_sf_text()
coord_sf()

17 保存图像

ggplot2的ggsave函数,可以根据图形的扩展名, 将ggplot2绘制的图形保存为相应的文件格式,默认保存7×7英寸, 300dpi的图形。

1
ggsave()

18 进一步阅读

  •  [http://www.cookbook-r.com/Graphs/](http://www.cookbook-r.com/Graphs/)
    
  •  https://www.rstudio.com/resources/cheatsheets/
    
  •  Hadley     Wickham (2010). A layered grammar of graphics. Journal of     Computational and Graphical Statistics, 19(1), 3-28.
    
  •  Wilkinson,     L. (2012). The grammar of graphics. In Handbook of Computational     Statistics (pp. 375-414). Springer, Berlin, Heidelberg.
    
  •  Wilkinson,     L. (2011). ggplot2: Elegant Graphics for Data Analysis by WICKHAM,     H. Biometrics, 67(2), 678-679.
    
  •  Hadley     Wickham (2007). Reshaping Data with the reshape Package. Journal of     Statistical Software, 21(12),     1-20. [http://www.jstatsoft.org/v21/i12/](http://www.jstatsoft.org/v21/i12/).
    
  •  Hadley     Wickham, Romain François, Lionel Henry and Kirill Müller (2019).     dplyr: A Grammar of Data Manipulation. R package version     0.8.0.1. [https://CRAN.R-project.org/package=dplyr](https://cran.r-project.org/package=dplyr)