统计图表总结与R语言实现

本文将统计图表分为四类进行说明。分别为趋势类、对比类、分布类和占比类,每类选择两种图进行分析。
在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

猜你喜欢

转载自blog.csdn.net/fortune_mz/article/details/130289707
今日推荐