欢迎查询ggplot2使用指南

你好! 这篇文章大致会讲一些ggplot2的大致用法,包含了各类图形,如折线图、柱状图、箱型图等等的画法。其中会包含一些代码知识,比如形状、颜色和与数据对应的解释。内容会处于不断完善的过程中,欢迎各位提出建议!

什么是ggplot2?

ggplot2是基于R语言平台的可视化图像处理包,对于绝大多数的可视化实现没有问题。如果对于R语言还不了解的同学,可以把它理解成嫁接在R平台上的可视化处理器,类似于Tableau的存在。

  1. 如何安装
    在R Studio平台输入指令:install.packages("ggplot2")
    或直接点击上方 Tools- Install Packages 搜索 ggplot2进行安装
  2. 如何使用
    R Studio平台输入指令:library(ggplot2)
  3. 相关网站

基本结构

ggplot2的运用非常简单,公式结构分为两部分:必须结构和非必须结构。
必须结构为构建可视化图形的必要语句,缺少这些语句将无法生成图片;非必须结构为一些可视化形式的修饰,如字体大小,图形形状和颜色等。若无非必需结构,可视化图片将以默认方式呈现。以下为基本结构格式:

ggplot (data = <DATA> ) +
<GEOM_FUNCTION> (mapping = aes( <MAPPINGS> ), stat = <STAT> , position = <POSITION> ) 
#此为必须结构

+ <COORDINATE_FUNCTION> 
+ <FACET_FUNCTION> 
+ <SCALE_FUNCTION>
+ <THEME_FUNCTION>
#此为非必须结构

图形类别geom_function

ggplot2可绘制的图形类别丰富,大致可以罗列为以下几类:
geom_abline 线形图
geom_bar 柱状图
geom_area 面积图(即连续的条形图)
geom_bin2d 二维封箱的热图
geom_blank 空白图
geom_boxplot 箱线图
geom_contour 等高线图
geom_crossbar crossbar图(类似于箱线图,但没有触须和极值点)
geom_density 密度图
geom_density2d 二维密度图
geom_errorbar 误差线(通常添加到其他图形上,比如柱状图、点图、线图等)
geom_errorbarh 水平误差线
geom_freqpoly 频率多边形(类似于直方图)
geom_hex 六边形图(通常用于六边形封箱)
geom_histogram 直方图
geom_hline 水平线
geom_jitter 点、自动添加了扰动
geom_line 线
geom_linerange 区间,用竖直线来表示
geom_path 几何路径,由一组点按顺序连接
geom_point
geom_pointrange 一条垂直线,线的中间有一个点(与Crossbar图和箱线图相关,可以用来表示线的范围)
geom_polygon 多边形
geom_quantile 一组分位数线(来自分位数回归)
geom_rect 二维的长方形
geom_ribbon 彩虹图(在连续的x值上表示y的范围,例如Tufte著名的拿破仑远征图)
geom_rug 触须
geom_segment 线段
geom_smooth 平滑的条件均值
geom_step 阶梯图
geom_text 文本
geom_tile 瓦片(即一个个的小长方形或多边形)
geom_vline 竖直线

图形属性映射
mapping 一系列图形属性的映射 aes()

统计变换函数
stat_abline 添加线条,用斜率和截距表示
stat_bin 分割数据,然后绘制直方图
stat_bin2d 二维密度图,用矩阵表示
stat_binhex 二维密度图,用六边形表示
stat_boxplot 绘制带触须的箱线图
stat_contour 绘制三维数据的等高线图
stat_density 绘制密度图
stat_density2d 绘制二维密度图
stat_function 添加函数曲线
stat_hline 添加水平线
stat_identity 绘制原始数据,不进行统计变换
stat_qq 绘制Q-Q图
stat_quantile 连续的分位线
stat_smooth 添加平滑曲线
stat_spoke 绘制有方向的数据点(由x和y指定位置,angle指定角度)
stat_sum 绘制不重复的取值之和(通常用在三点图上)
stat_summary 绘制汇总数据
stat_unique 绘制不同的数值,去掉重复的数值
stat_vline 绘制竖直线

定位函数
position_dodge 并列
position_fill 填充
position_identity 不对位置进行处理
position_jitter 扰动处理
position_stack 堆叠处理

坐标系coord_function

坐标函数 描述
coord_cartesian 笛卡儿坐标
coord_equal 等尺度坐标(斜率为1)
coord_flip 翻转笛卡儿坐标
coord_map 地图投影
coord_polar 极坐标投影
coord_trans 变换笛卡儿坐标

分面facet_function

分面函数 描述
facet_grid 将分面放置在二维网格中
facet_wrap 将一维的分面按二维排列

标度函数scale_function

scale_alpha alpha通道值(灰度)
scale_brewer 调色板,来自colorbrewer.org网站展示的颜色标度
scale_continuous 连续标度
scale_data 日期
scale_datetime 日期和时间
scale_discrete 离散值
scale_gradient 两种颜色构建的渐变色
scale_gradient2 3中颜色构建的渐变色
scale_gradientn n种颜色构建的渐变色
scale_grey 灰度颜色
scale_hue 均匀色调
scale_identity 直接使用指定的取值,不进行标度转换
scale_linetype 用线条模式来展示不同
scale_manual 手动指定离散标度
scale_shape 用不同的形状来展示不同的数值
scale_size 用不同大小的对象来展示不同的数值

各类图形作法

柱状图

柱状图分为两种:
简单柱状图:两类参数,简单统计某类参数的数量
带第三类参数的柱状图:三类参数,统计某类参数数量的同时在图上标明这类参数所属的类别;这类柱状图主要的呈现形式有填充式、堆积式和并列式。

以下给出两种例子
数据集:COVID-19 Activity.csv
下载链接:https://data.world/covid-19-data-resource-hub/covid-19-case-counts
R代码
简单柱状图

library(ggplot2)
setwd("Desktop/doc/ggplot2")

data <- read.csv("COVID-19 Activity.csv")
data$Month <- substring(data$REPORT_DATE, 1, 1)
View(data)

png(file = "positive_cases.png")
ggplot(data = data, aes(x = PROVINCE_STATE_NAME, y = sum(PEOPLE_POSITIVE_CASES_COUNT))) + 
geom_bar(stat = "identity") + 
labs(x = "Province", y = "Positive Cases", title = "COVID-19 Positive Cases by Province") + 
theme(axis.title = element_text(size = 8), axis.text = element_text(angle = 45, size = 5, color = 'grey'))
dev.off()

Positive Cases by Province

带第三类参数的柱状图

library(ggplot2)
setwd("Desktop/doc/ggplot2")

data <- read.csv("COVID-19 Activity.csv")
data$Month <- substring(data$REPORT_DATE, 1, 1)
View(data)

pdf(file = "positive_cases_with_month.pdf")
ggplot(data = data, aes(x = PROVINCE_STATE_NAME, y = sum(PEOPLE_POSITIVE_CASES_COUNT), fill = Month)) +
 geom_bar(stat = "identity", position = "stack") +
  labs(x = "Province", y = "Positive Cases", title = "COVID-19 Positive Cases by Province") + 
  theme(axis.title = element_text(size = 8), axis.text = element_text(angle = 45, size = 5, color = 'grey'), panel.background = element_blank(), axis.line = element_line(colour = "grey"))
dev.off()

Positive Cases by Province with Month
可以明显看出各州COVID-19的的病情况,并且从图中能反映出3-6月为病毒爆发高期。

png(file = "positive_cases_with_month1.png")
ggplot(data = data, aes(x = PROVINCE_STATE_NAME, y = sum(PEOPLE_POSITIVE_CASES_COUNT), fill = Month)) +
 geom_bar(stat = "identity", position = "fill") + 
 labs(x = "Province", y = "Positive Cases", title = "COVID-19 Positive Cases by Province") + 
 theme(axis.title = element_text(size = 8), axis.text = element_text(angle = 45, size = 5, color = 'grey'), panel.background = element_blank(), axis.line = element_line(colour = "grey"))
dev.off()

Positive Cases by Province with Month1

还有一种柱状图做法可以把堆叠式改为并排式,对于此数据集并排式并不是科学的画法,感兴趣的同学可以把position一栏改成“dodge”尝试画出并排式柱状图。

总结

本期主要描述了基于R的ggplot2的代码指南,以及柱状图的画法。后面几期会继续为大家作出折线图箱型图等常用图的例子,以及图形大小、颜色的应用。欢迎大家提出自己的意见!

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐