本文将统计图表分为四类进行说明。分别为趋势类、对比类、分布类和占比类,每类选择两种图进行分析。
在R语言中,本文使用ggplot2包实现图的绘制。
趋势类:折线图、面积图
对比类:柱状图、分组柱状图
分布类:散点图、直方图
占比类:饼图、环形图
趋势类
1. 折线图 (Line Chart)
折线图中,类别数据沿水平轴均匀分布,所有值数据沿垂直轴均匀分布。该图展示数据随时间或有序类别的变化趋势。
①使用ggplot2包绘制,导入包:
# install.packages("ggplot2") #下载包
library(ggplot2) # 导入包
②创建数据:
xValue <- 1:8 # 1 2 3 4 5 6 7 8
yValue <- runif(8) # 生成8个0-1之间的符合正态分布的随机数
data <- data.frame(xValue,yValue) # 生成数据框
③绘制折线图:
ggplot(data, aes(x=xValue, y=yValue)) +
geom_line(color="black") +
geom_point()
其中,ggplot()创建图形对象,然后利用“+”添加图层。geom_line()可设置折线的颜色color、大小size和类型linetype,geom_point()可设置点的颜色、大小和形状。
可视化展示:
④绘制多条折线图:
class_m=c("OJ","OJ","OJ","VC","VC","VC")
xValue1=c(0.5,1.0,2.0,0.5,1.0,2.0)
yValue1=c(13.23,22.70,26.06,7.98,16.77,26.14)
tgg=data.frame(class_m,xValue1,yValue1)
ggplot(tgg, aes(x=xValue1, y=yValue1, colour=class_m)) +
geom_line() +
geom_point()
与单条折线图相比,需要增加一列类别数据,如“OJ”、“VC”类。colour=class_m设置不同类别折线颜色不同。
可视化展示:
2. 面积图 (Area Chart)
面积图是在折线图的基础上形成的,它将线段与坐标轴之间的区域用颜色或条纹来填充,以展示数据的变换趋势。
绘制数据为折线图中所创建的数据,调用函数geom_area()绘制面积图:
ggplot(data, aes(x=xValue, y=yValue)) +
geom_area(fill="#69b3a2", alpha=0.4) +
geom_line(color="#69b3a2") +
geom_point(color="#69b3a2") +
ggtitle("title")
其中,geom_area() 函数中的fill 设置填充颜色, alpha 设置图形的透明度,ggtitle()可设置标题。
可视化展示:
绘制多个面积图:
ggplot(tgg, aes(x=xValue1, y=yValue1, fill=class_m)) +
geom_area(alpha=0.4, position = position_dodge()) +
ggtitle("title")
其中,aes中的fill表示面积填充颜色由数据类别区分,position参数设置成position_dodge()表示绘制重叠面积图。
重叠面积图:显示各个数值随时间或类别变化的趋势。
堆叠面积图:可视化“部分-整体”的关系,有助于展现各分类及总体的发展趋势和相互之间的关系。
可视化展示:
xValue1=0.5时,假设VC=8,OJ=12,重叠面积图中这两类对应的yValue1也分别为8和12。堆叠面积图中VC对应的yValue1为8,OJ对应的yValue1为(8+12)=20。
对比类
1. 柱状图 (Bar Chart)
柱状图将数据以柱形的形式展示。通常,横轴用于表示数据的分类变量,纵轴用于表示数据的数量变量。每个柱子的高度或长度表示该类别下的数据数量。
①创建数据:
df <- data.frame(group = c("A", "B", "C"),
count = c(3, 5, 6))
②调用geom_bar()函数绘制柱状图, 该函数默认使用频数统计变换,设置stat = “identity”表示直接使用原始数据进行绘图:
ggplot(df, aes(x = group, y = count, fill = group)) +
geom_bar(stat = "identity",width=0.5)
可视化展示:
2. 分组柱状图 (Grouped Bar Chart)
分组柱状图经常用于相同分组下,不同类数据的比较。用柱高度显示数值比较,用颜色来区分不同类的数据。
①创建数据:
specie <- c(rep("A", 3), rep("B", 3),
rep("C", 3), rep("D", 3))
condition <- rep(c("high", "normal", "low"), 4)
value <- abs(runif(12))
data <- data.frame(specie,condition,value)
数据框(data)中包含4组(specie),每组有3类(condition),每类对应一个观测值(value)。其中,利用rep()函数复制元素个数,保证数据个数对应。
②调用geom_bar()函数绘制
ggplot(data, aes(x=specie, y=value, fill=condition)) +
geom_bar(stat="identity", position="dodge")
可视化展示:
分布类
1. 散点图 (Scatter Plot)
散点图可以显示数据集群的形状,分析数据的分布。通过观察散点的分布,推断变量的相关性。
调用geom_point()函数绘制散点图:
ggplot(cars, aes(x = speed, y = dist)) +
geom_point(colour = '#69b3a2')
其中,cars为R的内置数据集,speed和dist为两列属性。
可视化展示:
2. 直方图 (Histogram)
直方图用于展示一组连续数据的分布情况,而柱状图用于比较组别的数据差异;直方图描述数值变量,而柱状图描述分类变量。
①创建30个随机数,并调用geom_histogram()函数绘制直方图:
x <- runif(30)
df <- data.frame(x)
ggplot(df, aes(x = x)) +
geom_histogram()
可视化展示:
占比类
1. 饼图 (Pie Chart)
饼图将总体看作一个圆,按照各分类的占比情况将圆划分大小不同的扇形,以弧度的大小来表示某一分类的占比。
先调用geom_bar()函数生成一个柱状图,设置x为常量因子,再调用coord_polar()函数将现有的图变形成圆形视图,形成饼图。
df <- data.frame(group=c("A", "B", "C", "D"),
value=c(10, 23, 15, 18))
ggplot(df, aes(x = "", y = value, fill = group)) +
geom_bar(stat="identity") +
coord_polar(theta = "y")
可视化展示:
2. 环状图 (Donut Chart)
环形图中间有一个圆形空白,一个环表示一个数据集,数据集中的每一个数据变量都由一段环带表示。环形图相较于饼图更容易让人把视觉重心从面积转移到长度上,对数据进行占比分析时更有视觉优势。
①数据为饼图创建的数据,调用mutate()函数为数据增加新列,导入dplyr包:
# install.packages("dplyr")
library(dplyr)
hsize <- 2 # 控制环更大或者更小
df <- df %>%
mutate(x = hsize) # 增加新列x,值为hsize
②绘制环形图:
先绘制柱状图(geom_col()与geom_bar(stat=“identity”)功能相同),再利用coord_polar()函数绘制饼图,最后利用xlim()和hsize参数控制环形大小。
ggplot(df, aes(x = hsize, y = value, fill = group)) +
geom_col() +
coord_polar(theta = "y") +
xlim(c(0, hsize + 0.5))
可视化展示:
这些只是最基础的统计图的绘制,如果需要按照自己的要求进行调整,可以对不同图层(函数)的参数进行更深入的学习。
R语言绘制统计图表有关网站(代码+图表),强推:
r-graph-gallery
r-charts