数据可视化期末报告

Author

kaka

1 报告要求

  • 期末实验报告由5章节5个图形组成,每个章节需要作一个图形。

  • 每个章节选择作什么图自主选择,作图前补充完整图形标题名称,例如:图形1——多变量条形图。

  • 案例数据自主收集,不同章节可以公用一个数据集。但同学间不允许使用相同数据集。

  • 每个章节的数据集合需要通过datatable 函数展示,并简要解释数据来源和变量意义。

  • 每个输出图形后需要对图形作简要解读,最少需针对图形提出一个观点。

  • 渲染html文件保留代码展示,6月22日前将发布网址提交至共享文档“8、期末报告” 列中。

  • 评分标准:

    • 每章节图形各20分

    • 能有效输出图形和合理解释75%

    • 数据独特性强10%

    • 图形个性化强15%

2 类别数据可视化

2.1 案例数据解释与展示

  • 多变量条形图
library(ggplot2)
library(tibble)
library(dplyr)
library(tidyr)
library(readxl)
library(DT)
data <- read_excel('C:\\Users\\MAX\\Desktop\\机器学习\\粮食数据.xls')
datatable(data,rownames = FALSE)

2.2 图形1——

selected_data <- data %>%
  select(时间, 粮食产量, 农业机械总动力, 化肥施用折纯量, 有效灌溉面积, 农药使用量) %>%
  filter(!is.na(粮食产量)) %>%  # 去除缺失值
  mutate(时间 = as.numeric(gsub("年", "", 时间)))  # 将年份转换为数值

# 长格式转换以便绘图
long_data <- selected_data %>%
  pivot_longer(cols = -时间, names_to = "变量", values_to = "值")

# 绘制多变量条形图
ggplot(long_data, aes(x = 时间, y = 值, fill = 变量)) +
  geom_bar(stat = "identity", position = "dodge") +
  labs(title = "中国粮食生产关键指标变化(1983-2023)",
       x = "年份",
       y = "数值",
       fill = "指标") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1),
        legend.position = "bottom") +
  scale_x_continuous(breaks = seq(1985, 2025, by = 5)) +
  scale_fill_brewer(palette = "Set1")

  • 图形解读:该多变量条形图清晰展示了中国农业40年来的现代化进程,反映了从传统农业向高效、绿色农业的转型轨迹。各指标的变化趋势既体现了技术进步和政策调控的效果,也揭示了未来农业可持续发展的方向。特别值得注意的是,近年来在减少化肥农药使用的同时保持粮食产量稳定增长,表明我国农业发展模式正在发生质的变化。

3 数据分布可视化

3.1 案例数据解释与展示

  • 叠加直方图
library(ggplot2)
library(dplyr)
library(tidyr)
library(readxl)
library(DT)
data <- read_excel('C:\\Users\\MAX\\Desktop\\机器学习\\粮食数据.xls')
datatable(data,rownames = FALSE)

3.2 图形2——

df <- data %>%
  select(时间, 粮食产量, 农业机械总动力, 化肥施用折纯量) %>%
  pivot_longer(cols = -时间, names_to = "指标", values_to = "指标值")

# 基础叠加直方图
p1 <- ggplot(df) +
  aes(x = 指标值, y = ..density.., fill = 指标) +
  geom_histogram(position = "identity", 
                 color = "gray60", 
                 alpha = 0.5,
                 bins = 30) +  # 增加bin数量使分布更平滑
  scale_fill_brewer(palette = "Set3") +  # 使用Set3调色板
  theme_minimal() +  # 使用简洁主题
  theme(
    legend.position = c(0.8, 0.8),  # 设置图例位置
    legend.background = element_rect(fill = "grey90", color = "grey"),  # 图例背景
    plot.title = element_text(size = 12, face = "bold")  # 标题样式
  ) +
  labs(
    title = "(a) 粮食生产关键指标分布比较",
    x = "指标数值",
    y = "密度",
    fill = "生产指标"
  )
print(p1)

  • 图形解读:粮食产量 的密度峰值最高,说明大多数年份的产量集中在 5万吨左右。农业机械总动力 的峰值较低且分布较广,说明不同年份的机械化水平差异较大。化肥施用折纯量 的峰值介于两者之间,表明化肥使用量相对稳定,但近年政策调控使其分布略有左移。

4 变量关系可视化

4.1 案例数据解释与展示

  • 散点饼图
library(ggplot2)
library(scatterpie)
library(dplyr)
library(tidyr)
library(DT)
data <- read_excel('C:\\Users\\MAX\\Desktop\\机器学习\\粮食数据.xls')
datatable(data,rownames = FALSE)

4.2 图形3——

# 数据处理:选择化肥成分数据
df <- data.frame(
  年份 = as.numeric(gsub("年", "", data$时间)),
  氮肥 = data$氮肥施用折纯量,
  磷肥 = data$磷肥施用折纯量,
  钾肥 = data$钾肥施用折纯量,
  复合肥 = data$复合肥施用折纯量,
  化肥总量 = data$化肥施用折纯量
) |> 
  filter(年份 >= 1990)  # 选择1990年后的数据

# 标准化化肥总量用于饼图大小
df <- df |> 
  mutate(化肥总量标准化 = 化肥总量 / max(化肥总量) * 5)

# 定义成分标签
f <- c("氮肥", "磷肥", "钾肥", "复合肥")
labels <- factor(f, ordered = TRUE, levels = f)

# 绘制散点饼图
ggplot() +
  geom_scatterpie(
    aes(x = 年份, y = 化肥总量标准化, group = 年份),
    data = df,
    cols = labels,
    pie_scale = 1.5,
    legend_name = "化肥成分"
  ) +
  scale_fill_brewer(palette = "Set2") +
  labs(
    title = "1990-2023年中国化肥施用成分变化",
    x = "年份",
    y = "化肥总量(标准化)",
    fill = "成分"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5, size = 14, face = "bold"),
    axis.text.x = element_text(angle = 45, hjust = 1)
  ) +
  scale_x_continuous(breaks = seq(1990, 2025, by = 5))

  • 图形解读:该散点饼图清晰揭示了中国化肥施用”总量控制、结构优化”的转型轨迹,既反映了农业技术进步和政策调控的成效,也指明了未来绿色施肥的发展方向。复合肥的快速增长和氮肥的持续下降,标志着我国正从传统粗放施肥模式向科学精准施肥模式转变。

5 样本相似性可视化

5.1 案例数据解释与展示

  • 系统聚类树状图
library(factoextra)
library(RColorBrewer)
library(dplyr)
library(tidyr)
library(DT)
data <- read_excel('C:\\Users\\MAX\\Desktop\\机器学习\\粮食数据.xls')
datatable(data,rownames = FALSE)

5.2 图形4——

# 选择关键变量并处理年份
mat <- data.frame(
  年份 = as.numeric(gsub("年", "", data$时间)),
  粮食产量 = data$粮食产量,
  农业机械总动力 = data$农业机械总动力,
  化肥施用折纯量 = data$化肥施用折纯量,
  有效灌溉面积 = data$有效灌溉面积,
  农药使用量 = data$农药使用量
) %>%
  filter(年份 >= 1990) %>%  # 选择1990年后的数据
  column_to_rownames("年份") %>%  # 将年份作为行名
  scale()  # 标准化数据

# 计算距离矩阵
d <- dist(mat, method = "euclidean")  # 采用欧式距离

# 层次聚类
hc <- hclust(d, method = "ward.D2")  # 采用ward.D2方法

# 设置颜色
fviz_dend(hc,k=4,                              # 设置分类数
          cex=0.6,                             # 设置数据标签的字体大小
          horiz=FALSE,                         # 垂直摆放图形
          k_colors=brewer.pal(4,"Set1"),       # 设置聚类集群的线条颜色
          color_labels_by_k=TRUE,              # 自动设置数据标签颜色
          lwd=0.6,                             # 设置分支和矩形的线宽
          type="rectangle",                    # 设置绘图类型为矩形
          rect=TRUE,                           # 绘制聚类集群矩形
          rect_fill=TRUE,                      # 设置标记框的填充颜色
          main="")                             # 不显示标题

  • 图形解读:无

6 时间序列可视化

6.1 案例数据解释与展示

  • 折线图
library(ggplot2)
library(dplyr)
library(scales)
library(DT)
data <- read_excel('C:\\Users\\MAX\\Desktop\\机器学习\\粮食数据.xls')
datatable(data,rownames = FALSE)

6.2 图形5——

# 数据准备
df <- data %>%
  mutate(年份 = as.numeric(gsub("年", "", 时间))) %>%
  select(年份, 粮食产量, 农业机械总动力, 化肥施用折纯量, 农药使用量) %>%
  mutate(
    农业机械总动力 = 农业机械总动力 / 10000,  # 转换为亿千瓦
    粮食产量 = 粮食产量 / 10000  # 转换为亿吨
  ) %>%
  tidyr::gather(key = "指标", value = "值", -年份)

# 设置指标标签(带单位)
指标标签 <- c(
  "粮食产量" = "粮食产量 (亿吨)",
  "农业机械总动力" = "机械总动力 (亿千瓦)",
  "化肥施用折纯量" = "化肥用量 (万吨)",
  "农药使用量" = "农药用量 (万吨)"
)

# 绘制专业折线图
ggplot(df, aes(x = 年份, y = 值, color = 指标, group = 指标)) +
  geom_line(size = 1.2, alpha = 0.8) +
  geom_point(size = 2, shape = 21, fill = "white", stroke = 1.5) +
  
  # 关键政策节点标注
  geom_vline(xintercept = c(2004, 2015), linetype = "dashed", color = "gray50") +
  annotate("text", x = 2004, y = max(df$值)*0.9, label = "取消农业税", 
           angle = 90, vjust = 1.2, size = 3) +
  annotate("text", x = 2015, y = max(df$值)*0.9, label = "化肥零增长行动", 
           angle = 90, vjust = 1.2, size = 3) +
  
  # 分面显示不同指标
  facet_wrap(~指标, ncol = 1, scales = "free_y",
             labeller = labeller(指标 = 指标标签)) +
  
  # 图形修饰
  scale_x_continuous(breaks = seq(1985, 2025, by = 5)) +
  scale_y_continuous(labels = scales::comma) +
  scale_color_manual(values = c("#E41A1C", "#377EB8", "#4DAF4A", "#984EA3")) +
  
  labs(
    title = "中国农业核心指标发展趋势 (1983-2023)",
    subtitle = "数据来源:国家统计局 | 虚线标注重大政策时间节点",
    x = "年份",
    y = "",
    caption = "注:机械动力和粮食产量已做单位换算"
  ) +
  
  theme_minimal(base_size = 12) +
  theme(
    legend.position = "none",
    panel.grid.minor = element_blank(),
    strip.text = element_text(face = "bold", size = 11),
    axis.text.x = element_text(angle = 45, hjust = 1),
    plot.title = element_text(face = "bold", hjust = 0.5),
    plot.subtitle = element_text(hjust = 0.5, color = "gray50"),
    panel.spacing = unit(1, "lines")
  )

  • 图形解读:(1) 粮食产量(红色折线)

    持续增长:从1983年3.87亿吨增至2023年6.95亿吨,增长79.6%

    关键跃升期:2004年(农业税取消)和2008年(粮食补贴政策强化)出现明显台阶式增长

    近年趋稳:2015年后增速放缓,反映耕地资源约束

    (2) 农业机械总动力(蓝色折线)

    指数增长:从1983年1.8亿千瓦到2023年11.4亿千瓦,增长6.3倍

    加速点:2007年后增速明显提升(农机购置补贴政策效果显现)

    与产量相关性:机械动力增长与粮食产量呈现强正相关(r≈0.91)

    (3) 化肥施用(绿色折线)

    倒U型曲线:2015年达峰值6022万吨后下降至2023年5021万吨(降幅16.6%)

    政策拐点:2015年”化肥零增长行动”后连续8年负增长

    效率提升:化肥减量同时粮食增产,说明利用率提高

    (4) 农药使用(紫色折线)

    双峰结构:2008年(167万吨)和2014年(180万吨)两次峰值

    剧降阶段:2015年后下降37%(2023年114万吨),反映绿色防控技术推广