R语言画散点图-饼图-折线图-柱状图-箱线图-直方图-等高线图-曲线图-热力图-雷达图-韦恩图(二D)
- 散点图
- 示例
- 解析
- 效果
- 饼图
- 示例
- 解析
- 效果
- 折线图
- 示例
- 解析
- 效果
- 柱状图
- 示例
- 解析
- 效果
- 箱线图
- 示例
- 解析
- 效果
- 直方图
- 示例
- 解析
- 效果
- 等高线图
- 使用filled.contour函数
- 示例
- 解析
- 效果
- 使用 ggplot2 包
- 示例
- 效果
- 使用 lattice 包
- 示例
- 效果
- 曲线图
- 使用 curve() 函数
- 示例
- 效果
- 使用 plot() 函数
- 示例
- 效果
- 使用 ggplot2 包绘制
- 示例
- 解析
- 效果
- 热力图
- 使用 heatmap() 函数
- 示例
- 效果
- 使用 pheatmap 包
- 示例
- 效果
- 使用 ggplot2 包和 geom_tile() 函数
- 示例
- 解析
- 效果
- 雷达图
- 示例
- 解析
- 效果
- 韦恩图
- 示例
- 解析
- 效果
散点图
使用基础的plot()函数可以很容易地绘制散点图~ 散点图通常用于展示两个连续变量之间的关系,例如显示其之间的相关性或者分布情况
示例
假设有如下数据集 data,包含了两个变量 x 和 y:
# 创建示例数据集
set.seed(123) # 设置随机种子以确保示例的可重现性
data <- data.frame(
x = rnorm(100), # 随机生成100个符合标准正态分布的x值
y = rnorm(100) # 随机生成100个符合标准正态分布的y值
)
# 绘制散点图
plot(data$x, data$y,
main = "散点图示例", # 图表标题
xlab = "变量X", # x轴标签
ylab = "变量Y", # y轴标签
col = "blue", # 散点颜色
pch = 16, # 散点形状(16表示实心圆)
xlim = c(-3, 3), # x轴范围
ylim = c(-3, 3) # y轴范围
)
解析
1. 创建数据集:
- 使用 rnorm(100) 生成了符合标准正态分布的随机数据作为示例的 x 和 y 变量
2. 绘制散点图:
- plot(data x , d a t a x, data x,datay, …):使用 plot() 函数绘制散点图,其中 data x 和 d a t a x 和 data x和datay 分别是数据集中的 x 和 y 变量
- main, xlab, ylab 分别设置图表的标题和轴标签
- col 设置散点的颜色为蓝色
- pch 设置散点的形状为实心圆(16表示实心圆,可以根据需要选择不同的形状)
- xlim 和 ylim 分别设置了 x 轴和 y 轴的显示范围
效果
饼图
画饼图通常使用pie()函数来实现,饼图适合用于展示各部分占整体的比例关系,如市场份额、各类别的比例等
示例
假设有如下数据集 data,包含了各部分的名称和相应的数值:
# 创建示例数据集
data <- c(25, 35, 20, 10, 10) # 各部分的数值,总和为100%
# 部分的标签
labels <- c("部分1", "部分2", "部分3", "部分4", "部分5")
# 颜色
colors <- c("red", "orange", "yellow", "green", "blue")
# 绘制饼图
pie(data, labels = labels, col = colors,
main = "饼图示例", # 图表标题
clockwise = TRUE, # 是否顺时针显示,默认为TRUE
radius = 1 # 饼图半径,默认为1
)
解析
1. 创建数据集:
- data 含有各部分的数值,这些数值表示每个部分占整体的百分比。在示例中,总和为100%
- labels 包含了每个部分的标签,用于在饼图中显示每个部分的名称
- colors 是一个向量,用于指定每个部分的颜色。在示例中,使用了五种颜色来区分不同的部分
2. 绘制饼图:
- pie(data, labels = labels, col = colors, …):使用 pie() 函数绘制饼图
- labels = labels 将 labels 中的标签应用到相应的部分
- col = colors 指定每个部分的颜色
- main = “饼图示例” 设置饼图的标题
- clockwise = TRUE 表示饼图的部分按顺时针方向显示
- radius = 1 设置饼图的半径,默认为1
效果
折线图
画折线图通常使用plot()函数或者更专门用于绘制折线图的plot()函数来实现。折线图适合展示随时间变化的数据趋势或者连续变量之间的关系
示例
假设有如下数据集 data,包含了随时间变化的两个连续变量 time 和 value:
# 创建示例数据集
set.seed(123) # 设置随机种子以确保示例的可重现性
data <- data.frame(
time = 1:10, # 时间序列,假设为10个时间点
value = cumsum(rnorm(10)) # 随机生成的累积值,模拟随时间变化的数据
)
# 绘制折线图
plot(data$time, data$value,
type = "l", # 指定绘制类型为折线图
main = "折线图示例", # 图表标题
xlab = "时间", # x轴标签
ylab = "数值", # y轴标签
col = "red", # 折线颜色
lwd = 2 # 折线宽度
)
解析
1. 创建数据集:
- data$time 是时间序列,假设为1到10,代表数据的时间点
- data$value 是随时间变化的数据值,使用 cumsum(rnorm(10)) 生成了一个随机累积值序列,模拟随时间变化的数据趋势
2. 绘制折线图:
- plot(data t i m e , d a t a time, data time,datavalue, …):使用 plot() 函数绘制折线图
- type = “l” 指定绘制类型为折线图,这样会连接各个数据点形成折线
- main = “折线图示例” 设置图表的标题
- xlab = “时间” 和 ylab = “数值” 分别设置 x 轴和 y 轴的标签
- col = “red” 设置折线的颜色为红色
- lwd = 2 设置折线的宽度为2个像素
效果
柱状图
画柱状图通常会使用barplot()函数来实现。柱状图适合用于比较不同类别之间的数据量或者频率
示例
假设有如下数据集 data,包含了各类别的数值:
# 创建示例数据集
data <- c(10, 20, 15, 25, 30) # 各类别的数值
# 类别的标签
names <- c("类别1", "类别2", "类别3", "类别4", "类别5")
# 绘制柱状图
barplot(data, names.arg = names,
main = "柱状图示例", # 图表标题
xlab = "类别", # x轴标签
ylab = "数值", # y轴标签
col = "skyblue", # 柱子的填充颜色
ylim = c(0, 35) # y轴范围
)
解析
1. 创建数据集:
- data 包含各个类别的数值,这些数值将用来绘制柱状图
- names 包含每个类别的名称,用于在柱状图中显示类别标签
2. 绘制柱状图:
- barplot(data, names.arg = names, …):使用 barplot() 函数绘制柱状图
- names.arg = names 将 names 中的标签应用到相应的柱子上
- main = “柱状图示例” 设置图表的标题
- xlab = “类别” 和 ylab = “数值” 分别设置 x 轴和 y 轴的标签
- col = “skyblue” 设置柱子的填充颜色为天蓝色
- ylim = c(0, 35) 设置 y 轴的显示范围,确保柱状图的高度合适显示
效果
箱线图
画箱线图通常可以使用boxplot()函数,箱线图常用于展示数据的分布情况,包括数据的中位数、四分位数、异常值等信息
示例
假设有如下数据集 data,包含了一组数据:
# 创建示例数据集
set.seed(123) # 设置随机种子以确保示例的可重现性
data <- list(
group1 = rnorm(100, mean = 0, sd = 1), # 第一组数据,符合标准正态分布
group2 = rnorm(100, mean = 1, sd = 1) # 第二组数据,均值为1的正态分布
)
# 绘制箱线图
boxplot(data,
names = c("组别1", "组别2"), # 设置每组数据的名称
main = "箱线图示例", # 图表标题
xlab = "组别", # x轴标签
ylab = "数据值", # y轴标签
col = c("skyblue", "salmon") # 箱体的填充颜色
)
解析
1. 创建数据集:
- data 包含两组数据,每组数据有100个样本
- group1 是符合标准正态分布的数据
- group2 是均值为1的正态分布数据
2. 绘制箱线图:
- boxplot(data, …):使用 boxplot() 函数绘制箱线图
- names = c(“组别1”, “组别2”) 设置每组数据的名称
- main = “箱线图示例” 设置图表的标题
- xlab = “组别” 和 ylab = “数据值” 分别设置 x 轴和 y 轴的标签
- col = c(“skyblue”, “salmon”) 设置箱体的填充颜色,分别对应两组数据
效果
直方图
直方图是一种展示数据分布的常用图形,它通过将数据范围分成若干个连续的区间,并用矩形的面积来表示在每个区间内数据点的频数或频率,直方图可以直观地了解数据的分布形态,如数据的集中趋势、分散程度和异常值等
示例
# 创建示例数据集
set.seed(123) # 设置随机种子以确保示例的可重现性
data <- rnorm(500) # 生成500个符合正态分布的随机数
# 绘制直方图
hist(data,
main = "直方图示例", # 图表标题
xlab = "数据值", # x轴标签
ylab = "频数", # y轴标签
col = "lightblue", # 矩形填充颜色
breaks = 20, # 设置区间的数量
border = "black" # 矩形边框颜色
)
解析
1. 创建数据集:
- 使用rnorm(500)生成500个符合标准正态分布的随机数作为示例数据
2. 绘制直方图:
- hist(data, …):使用hist()函数绘制直方图
- main = "直方图示例"设置图表的标题
- xlab = "数据值"和ylab = "频数"分别设置x轴和y轴的标签
- col = "lightblue"设置矩形填充颜色为浅蓝色
- breaks = 20指定数据范围被分成20个区间来绘制直方图。这个参数会影响直方图的平滑度和细节展示
- border = "black"设置了矩形边框颜色为黑色。
效果
等高线图
地形图也可以被称为等高线图或者地形等高分布图,可使用contour函数来创建2D等高线图,该函数通常与filled.contour一起使用以创建填充的等高线图,这样可以更好地表示地形特征
使用filled.contour函数
示例
# 创建数据
x <- seq(-10, 10, length.out = 100)
y <- seq(-10, 10, length.out = 100)
z <- outer(x, y, function(x, y) {
r <- sqrt(x^2 + y^2)
10 * sin(r) / r
})
# 绘制填充的等高线图
filled.contour(x, y, z,
color.palette = terrain.colors, # 使用地形颜色
plot.title = title("2D Terrain Contour Plot"),
plot.axes = {
axis(1)
axis(2)
},
key.title = title("Height"),
key.axes = axis(4, seq(-10, 10, by = 2), las = 2),
xlab = "X-axis",
ylab = "Y-axis"
)
解析
首先创建了一个网格的x和y值,然后使用outer函数来计算每个网格点上的z值(地形高度)
filled.contour函数用于绘制填充的等高线图,其中color.palette参数设置为terrain.colors以使用适合地形的颜色方案。同时也添加了标题、坐标轴标签
效果
使用 ggplot2 包
示例
# 安装和加载ggplot2包
install.packages("ggplot2")
library(ggplot2)
# 创建数据
x <- seq(-10, 10, length.out = 100)
y <- seq(-10, 10, length.out = 100)
z <- outer(x, y, function(x, y) {
r <- sqrt(x^2 + y^2)
10 * sin(r) / r
})
# 将数据转换为data frame
data <- expand.grid(X = x, Y = y)
data$Z <- as.vector(z)
# 绘制等高线图
ggplot(data, aes(x = X, y = Y, z = Z)) +
geom_contour_filled() +
labs(title = "2D Terrain Contour Plot", x = "X-axis", y = "Y-axis") +
theme_minimal()
效果
使用 lattice 包
示例
# 安装和加载lattice包
install.packages("lattice")
library(lattice)
# 创建数据
x <- seq(-10, 10, length.out = 100)
y <- seq(-10, 10, length.out = 100)
z <- outer(x, y, function(x, y) {
r <- sqrt(x^2 + y^2)
10 * sin(r) / r
})
# 将数据转换为data frame
data <- expand.grid(X = x, Y = y)
data$Z <- as.vector(z)
# 绘制等高线图
levelplot(Z ~ X * Y, data = data,
col.regions = terrain.colors,
main = "2D Terrain Contour Plot",
xlab = "X-axis", ylab = "Y-axis")
效果
曲线图
绘制曲线图主要用于展示函数或曲线的形状和变化。可使用基本的 plot() 函数或 curve() 函数来绘制曲线图
使用 curve() 函数
curve() 函数用于绘制数学函数的曲线图。这个函数特别适合用于绘制连续的数学函数曲线
示例
# 绘制正态分布函数的曲线图
curve(dnorm(x, mean = 0, sd = 1), from = -4, to = 4,
main = "正态分布曲线图",
xlab = "X轴",
ylab = "Y轴",
col = "blue",
lwd = 2)
效果
使用 plot() 函数
如果需要画离散的数据点,或想要绘制自定义的曲线,可以使用 plot() 函数配合 lines() 或 points() 函数来实现
示例
# 创建自定义数据
x <- seq(-2, 2, length.out = 100) # 创建从-2到2的100个均匀分布的点
y <- x^3 # 计算每个点的立方值
# 绘制曲线图
plot(x, y, type = "l", col = "red", lwd = 2,
main = "自定义曲线图",
xlab = "X轴",
ylab = "Y轴")
效果
使用 ggplot2 包绘制
ggplot2 是一个强大的绘图系统,不必过多阐述~ 其可用于绘制更复杂的图形
示例
# 加载ggplot2包
library(ggplot2)
# 创建数据框
data <- data.frame(
x = seq(-2, 2, length.out = 100),
y = seq(-2, 2, length.out = 100)^3
)
# 绘制曲线图
ggplot(data, aes(x = x, y = y)) +
geom_line(color = "blue", size = 1) +
labs(title = "自定义曲线图",
x = "X轴",
y = "Y轴") +
theme_minimal()
解析
1. 使用 curve()函数:
- curve(dnorm(x, mean = 0, sd = 1), from = -4, to = 4, …) 用于绘制正态分布曲线,其中 dnorm() 是正态分布的密度函数
- from 和 to 参数设置x轴的范围
- col 和 lwd 参数设置曲线的颜色和宽度
2. 使用 plot()和 lines()函数:
- plot(x, y, type = “l”, …) 绘制自定义的数据点,并使用 type = “l” 参数指定绘制线条
- x 和 y 是x轴和y轴的数值。
3. 使用 ggplot2包:
- ggplot(data, aes(x = x, y = y)) 创建一个基本的 ggplot 对象
- geom_line() 绘制曲线
- labs() 设置标题和轴标签
- theme_minimal() 设置图表的主题样式
效果
热力图
热力图是一种用于可视化矩阵数据中数值大小的图形,通过颜色编码展示数据的强度或密度。热力图常用于展示数据的模式和关系,特别是在数据分析和生物信息学中
使用 heatmap() 函数
heatmap() 是R基础包中提供的一个函数,用于绘制简单的热力图。它适合于处理矩阵形式的数据,并能够展示数据的相对大小
示例
# 创建示例数据集
set.seed(123) # 设置随机种子以确保结果的可重现性
matrix_data <- matrix(rnorm(100), nrow = 10) # 生成10x10的随机矩阵数据
# 绘制热力图
heatmap(matrix_data,
main = "热力图示例",
xlab = "列",
ylab = "行",
col = cm.colors(256), # 颜色选择
scale = "none", # 不对数据进行标准化
margins = c(5, 10) # 设置边距
)
效果
使用 pheatmap 包
pheatmap 包提供更多定制选项和改进的热力图功能,适用于更复杂的数据可视化
示例
需先确保已安装了 pheatmap 包:
install.packages("pheatmap")
# 加载pheatmap包
library(pheatmap)
# 创建示例数据集
set.seed(123)
matrix_data <- matrix(rnorm(100), nrow = 10) # 生成10x10的随机矩阵数据
# 绘制热力图
pheatmap(matrix_data,
main = "pheatmap示例",
color = colorRampPalette(c("blue", "white", "red"))(50), # 颜色渐变
scale = "row", # 按行标准化
cluster_rows = TRUE, # 行聚类
cluster_cols = TRUE, # 列聚类
show_rownames = TRUE, # 显示行名
show_colnames = TRUE # 显示列名
)
效果
使用 ggplot2 包和 geom_tile() 函数
ggplot2 提供的geom_tile函数适合创建个性化的热力图
示例
# 加载ggplot2包
library(ggplot2)
# 创建数据框
set.seed(123)
matrix_data <- matrix(rnorm(100), nrow = 10)
data_long <- as.data.frame(as.table(matrix_data)) # 将矩阵数据转换为长格式数据框
# 绘制热力图
ggplot(data_long, aes(x = Var2, y = Var1, fill = Freq)) +
geom_tile() +
scale_fill_gradient(low = "blue", high = "red") +
labs(title = "ggplot2热力图示例",
x = "列",
y = "行",
fill = "值") +
theme_minimal()
解析
1. 使用 heatmap()函数:
- matrix_data 是一个生成的10x10的随机矩阵
- col = cm.colors(256) 设置热力图的颜色渐变,cm.colors 是颜色函数
- scale = “none” 表示不对数据进行标准化(即原始数据被直接用于绘图)
2. 使用 pheatmap包:
- color = colorRampPalette(c(“blue”, “white”, “red”))(50) 设置颜色渐变,从蓝色到红色
- scale = “row” 表示对数据按行进行标准化
- cluster_rows 和 cluster_cols 控制是否对行和列进行聚类
3. 使用 ggplot2包:
- geom_tile() 用于绘制热力图的每个单元格
- scale_fill_gradient(low = “blue”, high = “red”) 设置颜色渐变的范围
- as.table(matrix_data) 将矩阵数据转换为适合 ggplot2 的长格式数据框
效果
雷达图
要画雷达图(也称为蜘蛛图或极坐标图),可使用fmsb包提供的函数来实现,雷达图适合用于展示多个变量的相对大小或比较不同类别在不同维度上的表现
示例
需确保你已经安装了fmsb包:
install.packages("fmsb")
# 创建示例数据集
data <- data.frame(
Category = c("A", "B", "C", "D", "E"), # 类别
Var1 = c(20, 15, 25, 30, 35), # 变量1
Var2 = c(25, 20, 30, 35, 40), # 变量2
Var3 = c(30, 35, 40, 45, 50) # 变量3
)
# 加载fmsb包
library(fmsb)
# 将数据标准化处理,将数值转换为角度
data_norm <- data.frame(
data[,-1] / apply(data[,-1], 1, max) # 标准化处理,除以各行中的最大值
)
# 设置雷达图参数
radarchart(data_norm, # 使用标准化处理后的数据
pcol = c("skyblue"), # 多边形的填充颜色
plwd = 2, # 多边形线条的宽度
cglcol = "black", # 各个多边形的颜色
cglty = 1, # 多边形线条的类型
axislabcol = "black", # 坐标轴标签的颜色
title = "雷达图示例", # 图表标题
vlcex = 0.8 # 标签文本的大小
)
解析
1. 创建数据集:
- data 包含不同类别在多个维度上的数值,例如变量1、变量2和变量3
2. 使用fmsb包绘制雷达图:
- data_norm 对原始数据进行标准化处理,确保各个维度的数据在相同的比例下进行比较
- radarchart() 函数用于绘制雷达图,其中参数设置多边形的填充颜色、线条宽度、坐标轴标签颜色、图表标题等
效果
韦恩图
绘制韦恩图可以使用 VennDiagram 包,它提供了多种功能来创建和定制韦恩图
示例
确保已经安装了 VennDiagram 包
install.packages("VennDiagram")
# 加载必要的包
library(VennDiagram)
# 定义韦恩图的数据
venn_data <- list(
A = c(1, 2, 3, 4, 5),
B = c(4, 5, 6, 7, 8),
C = c(7, 8, 9, 10, 11)
)
# 绘制 2D 韦恩图
venn_plot <- venn.diagram(
x = venn_data,
category.names = c("Group A", "Group B", "Group C"), # 组的名称
filename = NULL, # 不保存为文件,直接显示
output = TRUE, # 输出为图形对象
main = "2D Venn Diagram", # 主标题
col = c("blue", "green", "red"), # 组的边框颜色
fill = c("lightblue", "lightgreen", "lightcoral"), # 组的填充颜色
alpha = 0.5, # 填充透明度
cex = 1.5, # 组名称字体大小
cat.cex = 1.2, # 类别名称字体大小
cat.col = c("blue", "green", "red"), # 类别名称颜色
margin = 0.1 # 图形边缘的空白
)
# 显示图形
grid.draw(venn_plot)
解析
1. 定义韦恩图的数据:
- 使用 venn_data 列表来定义三个集合 A、B 和 C 的元素
2. 绘制 2D 韦恩图:
- venn.diagram() 函数用于创建韦恩图
- x 参数传递数据列表 venn_data
- category.names 设置每个集合的名称
- filename 设置为 NULL 表示不保存为文件,只在 R 中显示图形
- output 设置为 TRUE,使得函数返回图形对象
- main 设置主标题
- col 和 fill 分别设置边框颜色和填充颜色
- alpha 设置填充颜色的透明度
- cex 和 cat.cex 设置组名称和类别名称的字体大小
- cat.col 设置类别名称的颜色
- margin 设置图形边缘的空白区域
3. 显示图形:
- 使用 grid.draw() 函数来显示生成的韦恩图