library(reshape2)
library(DT)
data(ChickWeight)
# 转换为宽格式
data <- dcast(ChickWeight, Chick + Diet ~ Time, value.var = "weight")
# 显示
DT::datatable(data, rownames = FALSE)数据可视化期末报告
1 报告要求
期末实验报告由5章节5个图形组成,每个章节需要作一个图形。
每个章节选择作什么图自主选择,作图前补充完整图形标题名称,例如:图形1——多变量条形图。
案例数据自主收集,不同章节可以公用一个数据集。但同学间不允许使用相同数据集。
每个章节的数据集合需要通过
datatable函数展示,并简要解释数据来源和变量意义。每个输出图形后需要对图形作简要解读,最少需针对图形提出一个观点。
渲染html文件保留代码展示,6月22日前将发布网址提交至共享文档
“8、期末报告”列中。评分标准:
每章节图形各20分
能有效输出图形和合理解释75%
数据独特性强10%
图形个性化强15%
2 类别数据可视化
2.1 案例数据解释与展示
数据集名称: ChickWeight
来源: R语言内置数据集 (datasets包)
研究背景: 比较4种不同饲料配方对小鸡生长速度的影响
变量说明: weight - 小鸡体重(克) ,Time - 测量时间(天,0=出生日), Chick - 小鸡个体编号(1-50) ,Diet - 饲料配方分组: 1: 基础饲料 2: 基础+蛋白质补充 3: 基础+氨基酸补充 4: 基础+维生素补充
2.2 图形1——分组条形图
library(ggplot2)
library(dplyr)
# 准备数据:获取第21天的数据并按饲料组计算统计量
final_data <- ChickWeight %>%
filter(Time == 21) %>%
group_by(Diet) %>%
summarise(
mean_weight = mean(weight, na.rm = TRUE),
sd_weight = sd(weight, na.rm = TRUE),
n = n()
) %>%
mutate(
Diet = factor(Diet, labels = c("基础饲料", "蛋白质补充", "氨基酸补充", "维生素补充"))
)
# 绘制分组条形图
ggplot(final_data, aes(x = Diet, y = mean_weight, fill = Diet)) +
geom_col(
width = 0.8,
position = position_dodge(0.9),
color = "gray50",
show.legend = FALSE # 因为x轴已经是分组标签,不需要图例
) +
geom_errorbar(
aes(ymin = mean_weight - sd_weight, ymax = mean_weight + sd_weight),
width = 0.2,
position = position_dodge(0.9)
) +
geom_text(
aes(label = round(mean_weight, 1)),
position = position_dodge(0.9),
vjust = -1.5, # 将标签放在误差条上方
size = 4
) +
scale_fill_brewer(palette = "Set2") +
labs(
title = "不同饲料组第21天平均体重比较",
x = "饲料类型",
y = "平均体重(克)",
caption = "误差条表示±1个标准差"
) +
ylim(0, 1.1 * max(final_data$mean_weight + final_data$sd_weight)) +
theme_minimal() +
theme(
plot.title = element_text(hjust = 0.5, face = "bold"),
axis.text.x = element_text(angle = 15, hjust = 1)
)图形解读:(1)饲料效果排序 :氨基酸补充(270.3g) > 维生素补充(238.6g) ≈ 蛋白质补充(214.7g) > 基础饲料(177.8g)
最优组:氨基酸补充组(Diet 3)体重显著高于其他组,比基础组高52%
次优组:维生素补充组(Diet 4)和蛋白质补充组(Diet 2)效果相近
最差组:基础饲料组(Diet 1)表现明显落后
(2)组内变异程度
变异最大:氨基酸组(误差条最长,标准差±71.5g),说明个体对该饲料反应差异较大 变异最小:基础饲料组(标准差±58.7g),个体间生长较均匀
3 数据分布可视化
3.1 案例数据解释与展示
数据集名称: ChickWeight
来源: R语言内置数据集 (datasets包)
研究背景: 分析体重(weight)在饲料组(Diet)间的分布,展示不同饲料组(Diet)的体重分布核密度图
变量说明: weight - 小鸡体重(克) ,Time - 测量时间(天,0=出生日), Chick - 小鸡个体编号(1-50) ,Diet - 饲料配方分组: 1: 基础饲料 2: 基础+蛋白质补充 3: 基础+氨基酸补充 4: 基础+维生素补充
library(ggplot2)
library(dplyr)
library(reshape2) # 用于数据融合
# 数据准备:选择第21天数据并标准化
density_data <- ChickWeight %>%
filter(Time == 21) %>% # 聚焦实验终点
mutate(
Diet = factor(Diet, labels = c("基础饲料", "蛋白质", "氨基酸", "维生素")),
scaled_weight = scale(weight) # 标准化体重
)
datatable(density_data,rownames = F)3.2 图形2——分组核密度图
# 绘制分组核密度图
ggplot(density_data) +
aes(x = weight, y = after_stat(density), fill = Diet) +
geom_density(
position = "identity",
alpha = 0.5, # 设置半透明
color = "gray40", # 密度曲线边框色
linewidth = 0.5 # 边框线粗细
) +
scale_fill_brewer(
palette = "Set3", # 使用Set3调色板
name = "饲料类型" # 修改图例标题
) +
labs(
title = "不同饲料组第21天体重的分布比较",
x = "体重(克)",
y = "密度",
caption = "数据来源:R内置数据集ChickWeight"
) +
theme_minimal() +
theme(
legend.position = c(0.85, 0.8), # 调整图例位置
legend.background = element_rect(
fill = "grey90",
color = "grey70"
),
plot.title = element_text(face = "bold", hjust = 0.5)
) +
# 添加均值参考线
geom_vline(
data = density_data %>% group_by(Diet) %>% summarise(mean = mean(weight)),
aes(xintercept = mean, color = Diet),
linetype = "dashed",
show.legend = FALSE
)图形解读:基础饲料(绿色):曲线低矮宽阔,养不足导致生长不稳定。
蛋白质(黄色):双峰结构,可能存在亚群分化。
氨基酸(紫色):左偏长尾,对部分个体效果不佳。
维生素组(粉色):曲线基本对称,无显著拖尾,近似正态分布;说明维生素补充效果稳定,个体差异小。
4 变量关系可视化
4.1 案例数据解释与展示
数据集名称: ChickWeight
来源: R语言内置数据集 (datasets包)
研究背景: 展示不同饲料组(Diet)的体重随时间变化的关系,并添加线性趋势线。
变量说明: weight - 小鸡体重(克) ,Time - 测量时间(天,0=出生日), Chick - 小鸡个体编号(1-50) ,Diet - 饲料配方分组: 1: 基础饲料 2: 基础+蛋白质补充 3: 基础+氨基酸补充 4: 基础+维生素补充。
library(ggplot2)
library(dplyr)
# 数据准备:将Diet转换为因子并添加标签
chick_plot_data <- ChickWeight %>%
mutate(Diet = factor(Diet,
levels = c(1, 2, 3, 4),
labels = c("基础饲料", "蛋白质", "氨基酸", "维生素")))
datatable(chick_plot_data,rownames = F)4.2 图形3——grid.arrange(p1,p2,ncol=2)
library(gridExtra)
p1 <- ggplot(chick_plot_data, aes(x = Time, y = weight, color = Diet)) +
geom_point(size = 1.5, alpha = 0.7) + # 半透明点避免重叠
stat_smooth(method = "lm",
color = "red",
fill = "deepskyblue",
size = 0.5) +
facet_grid(~ Diet, scales = "free_x") + # 按饲料组分面
scale_color_brewer(palette = "Set1") +
labs(title = "小鸡体重随时间变化(按饲料组分面)",
x = "时间(天)",
y = "体重(克)") +
theme_minimal() +
theme(legend.position = "none",
panel.spacing = unit(0.2, "lines"),
strip.text = element_text(face = "bold")) # 分面标题加粗
# 版本2:形状+颜色分组(整体图)
p2 <- ggplot(chick_plot_data, aes(x = Time, y = weight,
shape = Diet, color = Diet)) +
geom_point(size = 2.5, alpha = 0.8) +
scale_shape_manual(values = c(16, 17, 15, 18)) + # 实心不同形状
scale_color_brewer(palette = "Set2") +
stat_smooth(method = "lm", se = FALSE, size = 0.5) + # 添加趋势线
labs(title = "小鸡生长轨迹(形状颜色双重分组)",
x = "时间(天)",
y = "体重(克)") +
theme_minimal() +
theme(legend.position = "bottom",
legend.title = element_text(face = "bold"))
# 并排显示两个版本
grid.arrange(p1,p2,ncol=2)图形解读:
分面图(p1): 氨基酸组(绿色)斜率最大,生长最快;基础饲料组(红色)趋势线最平缓
组合图(p2): 维生素组(粉色菱形)后期体重集中度高;蛋白质组(黄色三角)个体差异明显
生物学意义 :
氨基酸的显著优势:促进蛋白质合成效率,直接支持肌肉生长 维生素组的稳定性:代谢调节作用减少个体差异 基础组的局限:营养不足导致生长潜力受限
5 样本相似性可视化
5.1 案例数据解释与展示
数据集名称: ChickWeight
来源: R语言内置数据集 (datasets包)
研究背景: 对数据进行层次聚类分析,分析不同小鸡个体的生长模式相似性。
变量说明: weight - 小鸡体重(克) ,Time - 测量时间(天,0=出生日), Chick - 小鸡个体编号(1-50) ,Diet - 饲料配方分组: 1: 基础饲料 2: 基础+蛋白质补充 3: 基础+氨基酸补充 4: 基础+维生素补充。
library(factoextra)
library(dplyr)
library(RColorBrewer)
library(ggplot2)
# 数据准备:转换为宽格式(每只小鸡一条记录,时间点为变量)
wide_data <- ChickWeight %>%
select(Chick, Time, weight) %>%
tidyr::pivot_wider(
names_from = Time,
values_from = weight,
names_prefix = "Day"
) %>%
na.omit() # 移除未完成实验的个体
# 提取数值矩阵并标准化
mat <- wide_data %>%
select(-Chick) %>%
as.matrix()
rownames(mat) <- wide_data$Chick # 用小鸡编号作为行名
# 计算欧式距离并聚类
d <- dist(scale(mat), method = "euclidean")
hc <- hclust(d, method = "ward.D2")
datatable(wide_data,rownames = F)5.2 图形4——系统聚类树状图
# 可视化(假设分为3类)
cols <- brewer.pal(3, "Set1")
fviz_dend(
hc,
k = 3,
k_colors = cols,
color_labels_by_k = TRUE,
type = "circular",
cex = 0.6, # 缩小标签字体
lwd = 0.6,
repel = TRUE,
main = "小鸡生长模式聚类树状图 (k=3)"
)# 提取聚类结果
cluster <- cutree(hc, k = 3)
# 分析聚类与饲料组的关系
result <- wide_data %>%
mutate(Cluster = factor(cluster)) %>%
left_join(
ChickWeight %>%
select(Chick, Diet) %>%
distinct(),
by = "Chick"
)
# 统计交叉表
table(Cluster = result$Cluster, Diet = result$Diet) Diet
Cluster 1 2 3 4
1 7 5 4 1
2 3 4 6 8
3 6 1 0 0
# 可视化聚类中心生长曲线
result_long <- result %>%
tidyr::pivot_longer(
cols = starts_with("Day"),
names_to = "Time",
values_to = "Weight"
) %>%
mutate(Time = as.numeric(gsub("Day", "", Time)))
ggplot(result_long, aes(x = Time, y = Weight, color = Cluster)) +
stat_summary(fun = mean, geom = "line", size = 1.2) +
scale_color_manual(values = cols) +
labs(title = "三类生长模式平均曲线",
x = "时间(天)", y = "平均体重(克)") +
theme_minimal()图形解读:
树状图:分支长度反映个体生长模式差异程度,同颜色分支表示生长轨迹相似的群体。
生长曲线: 第1类(蓝色)快速增长型,第2类(红色)中等增速型,第3类(绿色)缓慢增长型。
6 时间序列可视化
6.1 案例数据解释与展示
数据集名称: ChickWeight
来源: R语言内置数据集 (datasets包)
研究背景: 对数据作折线图,展示不同饲料组小鸡体重随时间的变化模式。
变量说明: weight - 小鸡体重(克) ,Time - 测量时间(天,0=出生日), Chick - 小鸡个体编号(1-50) ,Diet - 饲料配方分组: 1: 基础饲料 2: 基础+蛋白质补充 3: 基础+氨基酸补充 4: 基础+维生素补充。
library(ggplot2)
library(dplyr)
library(ggpol)
# 数据准备:计算各饲料组每天的平均体重
plot_data <- ChickWeight %>%
group_by(Diet, Time) %>%
summarise(
mean_weight = mean(weight, na.rm = TRUE),
.groups = 'drop'
) %>%
mutate(
Diet = factor(Diet, labels = c("基础饲料", "蛋白质", "氨基酸", "维生素"))
)
datatable(plot_data,rownames = F)6.2 图形5——分面折线图
# 绘制分面折线图
ggplot(plot_data, aes(x = Time, y = mean_weight, color = Diet)) +
geom_line(linewidth = 0.6) +
# 高亮关键生长期(第10-20天)
geom_tshighlight(
aes(xmin = 10, xmax = 20), # 高亮第10-20天
color = "skyblue",
fill = "lightblue",
alpha = 0.05
) +
scale_x_continuous(
breaks = seq(0, 21, by = 7), # 每周标记一次
expand = c(0, 0)
) +
scale_color_brewer(palette = "Set1") +
facet_wrap(~ Diet, ncol = 2, scales = "free_y") + # 按饲料组分面
labs(
title = "不同饲料组小鸡平均体重变化",
x = "生长时间(天)",
y = "平均体重(克)",
color = "饲料类型"
) +
theme_minimal() +
theme(
legend.position = "none",
axis.text.x = element_text(angle = 45, hjust = 1),
panel.grid.minor = element_blank(),
strip.text = element_text(face = "bold")
)图形解读:
蓝色高亮区域:标记第10-20天的关键生长期 。氨基酸组(绿色):增长斜率最大,后期明显领先 。基础饲料组(红色):增长最缓慢。
生物学意义:
氨基酸优势:显著促进蛋白质合成,支持肌肉快速发育 。维生素特性:调节代谢平衡,带来更平稳的增长曲线。基础组局限:营养不足导致生长潜力未充分表达。高亮区重要性:第10-20天是营养干预的关键窗口期。