ggplot2中显示坐标轴_一文读懂ggplot2数据可视化

本文详细介绍了ggplot2在R中的数据可视化原理和应用,从ggplot2的基本组成、绘图组件、数据转换到坐标轴控制,覆盖了一维到三维数据的多种图表绘制,包括散点图、柱状图、线图等。此外,还探讨了颜色、形状、图例、地图绘制和图像保存等方面,帮助读者深入理解ggplot2的绘图逻辑和实践技巧。
摘要由CSDN通过智能技术生成

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的优势,因此不太建议使用。

#### 载入数据
library(maps)
library(ggthemes)
library(ggplot2)

2.1.1 普通绘图

plot(hwy ~ cty, data = mpg)

d6b1d1d00803cc26916a50e86c7acf71.png

2.1.2 qplot绘图

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

9b972f2bc21fd315256531c2c93288c5.png

2.1.3 ggplot2绘图

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") ### 纵轴

3dc1f4e3e46a3a577c7a29343de83261.png

3 基本绘图组件及其属性

3.1 多边形

thismap = map_data("world")
c c + geom_polygon(fill="white", colour="gray")

388b183fd39f7d9262ee5ee5ca1fad86.png

3.2 折线图

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

f53c2c311a3eb68fb9fb4a9b306eac81.png

3.3 带状图

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

5bb6745041c715dc56d233c44b1de160.png

3.4 线段

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

1e9f33c277b5e7fefac7751f40903258.png

3.5 长方形

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

07e77ff92f3ac073d56489e4ef40c891.png

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

4.1 一维连续数据

a 

4.2 频度阴影图

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

fb55efd901f72c0d518192695efb9426.png

4.3 核密度图

a + geom_density(kernel = "gaussian")

2bfad3ccd7b7b7049ed5f5b2f2a01811.png

4.4 点状频度图

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

3760cf82588f741d84b1bf2454c67791.png

4.5 频度折线图

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

8026b432f83de1590fc230589b243dc8.png

4.6 单变量离散数据

b b + geom_bar()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值