数据可视化期末报告

Author

221527130郭宝声

1 报告要求

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

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

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

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

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

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

  • 评分标准:

    • 每章节图形各20分

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

    • 数据独特性强10%

    • 图形个性化强15%

2 类别数据可视化

2.1 案例数据解释与展示

# 设置临时目录(确保路径存在且有写入权限)
Sys.setenv(TEMP = "C:/Temp")  # 英文路径,手动创建该文件夹
Sys.setenv(TMP = "C:/Temp")   # 同时设置 TMP 变量

# 验证是否生效
Sys.getenv("TEMP")  # 应返回 "C:/Temp"
[1] "C:/Temp"
# 加载必要包
library(tidyverse)
library(scales)
library(ggrepel)

# 设置中文字体支持 (Windows系统)
if(.Platform$OS.type == "windows"){
  windowsFonts(SimHei = windowsFont("SimHei"))
  theme_set(theme_minimal(base_family = "SimHei"))
}

# 创建数据框
gdp_data <- data.frame(
  年份 = 2015:2024,
  国民总收入 = c(699224.5, 757492.0, 846292.7, 931972.5, 1003108.4, 1026751.9, 1165816.8, 1223706.8, 1284773.9, 1339814.6),
  国内生产总值 = c(702511.5, 761193.0, 847382.9, 936010.1, 1005872.4, 1034867.6, 1173823.0, 1234029.4, 1294271.7, 1349083.5),
  第一产业 = c(57774.6, 60139.2, 62099.5, 64745.2, 70473.6, 78030.9, 83216.5, 88207.0, 89169.1, 91413.9),
  第二产业 = c(281338.9, 295427.8, 331580.5, 364835.2, 379860.0, 381985.8, 447138.2, 467629.6, 475936.1, 492087.1),
  第三产业 = c(363397.9, 405626.0, 453702.9, 506429.8, 555538.9, 574850.9, 643468.4, 678192.7, 729166.5, 765582.5)
)

# 转换为长格式
gdp_long <- gdp_data %>%
  pivot_longer(
    cols = c(第一产业, 第二产业, 第三产业),
    names_to = "产业类型",
    values_to = "产值"
  ) %>%
  mutate(产业类型 = factor(产业类型, 
                       levels = c("第一产业", "第二产业", "第三产业"),
                       labels = c("农业", "工业", "服务业")))

# 创建GDP增长标签数据
growth_labels <- gdp_data %>%
  mutate(
    gdp_growth = round((国内生产总值 - lag(国内生产总值)) / lag(国内生产总值) * 100, 1),
    label = ifelse(!is.na(gdp_growth), 
                  paste0(round(国内生产总值/10000, 1), "万亿\n(+", gdp_growth, "%)"), 
                  paste0(round(国内生产总值/10000, 1), "万亿"))
  )

2.2 图形1——

# 绘制堆叠柱状图
ggplot(gdp_long, aes(x = 年份, y = 产值/10000, fill = 产业类型)) +
  geom_bar(stat = "identity") +
  # 添加GDP总值标签 - 这里不再引用产业类型
  geom_text(data = growth_labels, 
            aes(x = 年份, y = 国内生产总值/10000 + 5, label = label),
            size = 3.5, color = "darkblue", family = "SimHei", inherit.aes = FALSE) +
  # 添加产业占比标签 - 只在gdp_long数据中使用产业类型
  geom_text(aes(label = scales::percent(产值/国内生产总值, accuracy = 0.1)), 
            position = position_stack(vjust = 0.5),
            size = 3, color = "white", fontface = "bold") +
  # 设置坐标轴和标题
  labs(title = "2015-2024年中国GDP产业结构变化",
       subtitle = "数据来源:国家统计局",
       x = "年份", y = "产值(万亿元)", fill = "产业类型") +
  # 设置颜色
  scale_fill_manual(values = c("#66c2a5", "#fc8d62", "#8da0cb")) +
  # 设置y轴刻度
  scale_y_continuous(breaks = seq(0, 140, by = 20),
                    limits = c(0, 140)) +
  # 设置x轴刻度
  scale_x_continuous(breaks = 2015:2024) +
  # 主题美化
  theme(
    plot.title = element_text(size = 18, face = "bold", hjust = 0.5),
    plot.subtitle = element_text(hjust = 0.5, color = "gray40"),
    panel.grid.major.x = element_blank(),
    panel.grid.minor.x = element_blank(),
    legend.position = "top",
    legend.title = element_blank()
  ) +
  # 添加趋势线
  geom_line(data = gdp_data, 
            aes(x = 年份, y = 国内生产总值/10000, group = 1),
            color = "darkblue", size = 1, inherit.aes = FALSE) +
  geom_point(data = gdp_data, 
             aes(x = 年份, y = 国内生产总值/10000),
             color = "darkblue", size = 3, inherit.aes = FALSE)

  • 图形解读:

    基础图形

    堆叠柱状图:每个柱子代表一年的GDP总量,由下至上按农业(绿色)、工业(橙色)、服务业(紫色)三大产业堆叠构成。

    趋势线:蓝色折线连接各年GDP总值顶点,显示总量变化趋势。

    数据标签

    顶部标签:蓝色文字标注当年GDP总量(万亿元)及同比增长率(如”104.5万亿(+5.2%)“)。

    产业占比标签:白色百分比数字显示各产业在当年GDP中的占比(如”6.8%“)。

3 数据分布可视化

3.1 案例数据解释与展示

library(ggplot2)
library(dplyr)

# 使用内置数据(替换为您的实际数据)
gdp_data <- data.frame(
  年份 = 2015:2024,
  第一产业 = c(5.78, 6.01, 6.21, 6.47, 7.04, 7.80, 8.32, 8.82, 8.92, 9.14),
  第二产业 = c(28.13, 29.54, 33.16, 36.48, 37.99, 38.20, 44.71, 46.76, 47.59, 49.21),
  第三产业 = c(36.34, 40.56, 45.37, 50.64, 55.55, 57.49, 64.35, 67.82, 72.92, 76.56)
)

# 转换为长格式
gdp_long <- gdp_data %>%
  tidyr::pivot_longer(
    cols = -年份,
    names_to = "产业类型",
    values_to = "产值"
  ) %>%
  mutate(产业类型 = factor(产业类型, 
                       levels = c("第一产业", "第二产业", "第三产业"),
                       labels = c("农业", "工业", "服务业")))

3.2 图形2——

# 绘制小提琴图+箱线图
ggplot(gdp_long, aes(x = 产业类型, y = 产值, fill = 产业类型)) +
  geom_violin(alpha = 0.7, width = 0.8) +
  geom_boxplot(width = 0.2, fill = "white", outlier.shape = NA) +
  geom_jitter(width = 0.1, size = 2, alpha = 0.5) +
  labs(
    title = "中国三大产业GDP分布(2015-2024)",
    subtitle = "数据来源:国家统计局",
    x = "产业类型",
    y = "产值(万亿元)"
  ) +
  scale_fill_manual(values = c("#66c2a5", "#fc8d62", "#8da0cb")) +
  theme_minimal(base_family = "SimHei") +
  theme(
    plot.title = element_text(size = 16, face = "bold"),
    legend.position = "none",
    panel.grid.major.x = element_blank()
  )

  • 图形解读:

    小提琴形状(主体部分):宽度表示数据分布的密度,越宽的区域代表该产值区间出现的频率越高。

    农业(绿色):呈现”瘦高”形态,说明产值集中在5-10万亿元窄区间。

    工业(橙色):底部宽阔,显示存在低产值异常年份(如2015年),整体呈右偏分布。

    服务业(紫色):顶部延伸最远,反映近年快速增长趋势。

    箱线图(内部白色矩形):箱体范围对应25%-75%分位数,中位线(箱内粗线)显示产业典型值。

    工业的箱体最长,说明其年度波动性最大。

    散点(灰色点):每个点代表具体年份的产值,2015-2024年数据纵向排列,可见逐年上升趋势。

4 变量关系可视化

4.1 案例数据解释与展示

library(ggplot2)
library(scales)

# 数据准备(使用您提供的CSV数据结构)
gdp_plot_data <- data.frame(
  年份 = 2015:2024,
  国内生产总值 = c(702511.5, 761193.0, 847382.9, 936010.1, 1005872.4, 1034867.6, 1173823.0, 1234029.4, 1294271.7, 1349083.5)/10000, # 转换为万亿元
  人均GDP = c(50912, 54849, 60691, 66726, 71453, 73338, 83111, 87385, 91746, 95749)/10000 # 转换为万元
)

4.2 图形3——

# 生成可视化图形
ggplot(gdp_plot_data, aes(x = 年份)) +
  # GDP总量柱状图(左轴)
  geom_col(aes(y = 国内生产总值, fill = "GDP总量"), 
           alpha = 0.7, width = 0.7) +
  # 人均GDP折线+点(右轴)
  geom_line(aes(y = 人均GDP*3, color = "人均GDP"), 
            linewidth = 1.2, group = 1) +  # 缩放系数3使双轴比例协调
  geom_point(aes(y = 人均GDP*3, color = "人均GDP"), 
             size = 3) +
  # 双轴设置
  scale_y_continuous(
    name = "GDP总量(万亿元)",
    sec.axis = sec_axis(~./3, name = "人均GDP(万元)")  # 反向缩放
  ) +
  # 标签与标题
  labs(
    title = "2015-2024年中国GDP总量与人均GDP增长趋势",
    subtitle = "数据来源:国家统计局",
    x = "年份",
    caption = "注:GDP总量为柱状图(左轴),人均GDP为折线图(右轴)"
  ) +
  # 颜色设置
  scale_fill_manual(values = c("GDP总量" = "#4E79A7")) +
  scale_color_manual(values = c("人均GDP" = "#E15759")) +
  # 主题美化
  theme_minimal(base_family = "SimHei") +
  theme(
    plot.title = element_text(size = 16, face = "bold", hjust = 0.5),
    plot.subtitle = element_text(hjust = 0.5, color = "gray40"),
    legend.position = "top",
    legend.title = element_blank(),
    panel.grid.major.x = element_blank()
  ) +
  # 添加数值标签
  geom_text(aes(y = 国内生产总值, label = round(国内生产总值, 1)),
            vjust = -0.5, size = 3, color = "#4E79A7") +
  geom_text(aes(y = 人均GDP*3, label = round(人均GDP, 1)),
            vjust = 1.5, size = 3, color = "#E15759")

  • 图形解读:

    双变量对比:左侧柱状图显示GDP总量(万亿元),右侧折线图显示人均GDP(万元)

    关键数据标注:直接在图形上显示具体数值

    专业设计:蓝色柱状图代表GDP总量,红色折线图代表人均GDP。

    总量增长:GDP从2015年70.3万亿持续增长至2024年134.9万亿,2020年增速明显放缓

    人均增长:人均GDP从5.09万元增至9.57万元,增长趋势与总量基本同步

    增长弹性:2021年后人均增速(红折线斜率)略高于总量增速,反映人口增速放缓的影响

5 样本相似性可视化

5.1 案例数据解释与展示

library(ggplot2)
library(dplyr)
library(tidyr)
library(ggrepel)  # 用于智能标签

# 数据准备(使用您提供的CSV结构)
gdp_data <- data.frame(
  年份 = 2015:2024,
  国民总收入 = c(699224.5, 757492.0, 846292.7, 931972.5, 1003108.4, 1026751.9, 1165816.8, 1223706.8, 1284773.9, 1339814.6),
  国内生产总值 = c(702511.5, 761193.0, 847382.9, 936010.1, 1005872.4, 1034867.6, 1173823.0, 1234029.4, 1294271.7, 1349083.5),
  第一产业 = c(57774.6, 60139.2, 62099.5, 64745.2, 70473.6, 78030.9, 83216.5, 88207.0, 89169.1, 91413.9),
  第二产业 = c(281338.9, 295427.8, 331580.5, 364835.2, 379860.0, 381985.8, 447138.2, 467629.6, 475936.1, 492087.1),
  第三产业 = c(363397.9, 405626.0, 453702.9, 506429.8, 555538.9, 574850.9, 643468.4, 678192.7, 729166.5, 765582.5)
)

# 标准化数据(PCA前必要步骤)
scaled_data <- gdp_data %>% 
  select(-年份) %>% 
  scale() %>% 
  as.data.frame()

# 执行PCA分析
pca_result <- prcomp(scaled_data, center = TRUE, scale. = TRUE)

# 提取主成分得分
pca_scores <- as.data.frame(pca_result$x[, 1:2]) %>% 
  mutate(年份 = gdp_data$年份,
         时期 = ifelse(年份 >= 2020, "2020后", "2020前"))

# 计算变量载荷(用于箭头)
loadings <- as.data.frame(pca_result$rotation[, 1:2] * 3)  # 缩放因子增强可视化

5.2 图形4——

# 绘制PCA双标图
ggplot() +
  # 样本点(按时期着色)
  geom_point(data = pca_scores, 
             aes(x = PC1, y = PC2, color = 时期), 
             size = 5, alpha = 0.8) +
  # 样本标签(年份)
  geom_text_repel(data = pca_scores, 
                  aes(x = PC1, y = PC2, label = 年份),
                  size = 4, box.padding = 0.5) +
  # 变量箭头
  geom_segment(data = loadings, 
               aes(x = 0, y = 0, xend = PC1, yend = PC2),
               arrow = arrow(length = unit(0.2, "cm")), 
               color = "darkred") +
  # 变量标签
  geom_text_repel(data = loadings, 
                  aes(x = PC1, y = PC2, label = rownames(loadings)),
                  color = "darkred", size = 5) +
  # 参考线
  geom_hline(yintercept = 0, linetype = "dashed", alpha = 0.5) +
  geom_vline(xintercept = 0, linetype = "dashed", alpha = 0.5) +
  # 图形修饰
  labs(title = "中国GDP数据相似性分析(2015-2024)",
       subtitle = "基于主成分分析的双标图",
       x = paste0("第一主成分(方差解释率:", round(summary(pca_result)$importance[2,1]*100, 1), "%)"),
       y = paste0("第二主成分(方差解释率:", round(summary(pca_result)$importance[2,2]*100, 1), "%)"),
       color = "时期分组") +
  scale_color_manual(values = c("#1b9e77", "#d95f02")) +
  theme_minimal(base_family = "SimHei") +
  theme(legend.position = "right",
        plot.title = element_text(face = "bold", hjust = 0.5),
        plot.subtitle = element_text(hjust = 0.5, color = "gray40"))

  • 图形解读:

    样本相似性

    相邻年份的点距离越近,说明经济结构越相似

    2020年前后明显分为两个簇群,反映疫情前后的经济模式差异

    变量贡献

    箭头指向表示原始变量与主成分的关系,第三产业国内生产总值箭头最长,说明对样本差异贡献最大,第一产业箭头方向独特,反映其独立于其他指标的变化模式

    关键发现

    PC1(横轴)主要捕捉经济规模增长(从左到右:2015→2024)

    PC2(纵轴)反映产业结构调整(2020年后向上偏移,显示服务业比重提升)

6 时间序列可视化

6.1 案例数据解释与展示

library(ggplot2)
library(scales)
library(dplyr)

# 数据准备(使用您提供的CSV结构)
gdp_data <- data.frame(
  年份 = 2015:2024,
  国内生产总值 = c(702511.5, 761193.0, 847382.9, 936010.1, 1005872.4, 1034867.6, 1173823.0, 1234029.4, 1294271.7, 1349083.5)/10000, # 转换为万亿元
  第一产业 = c(57774.6, 60139.2, 62099.5, 64745.2, 70473.6, 78030.9, 83216.5, 88207.0, 89169.1, 91413.9)/10000,
  第二产业 = c(281338.9, 295427.8, 331580.5, 364835.2, 379860.0, 381985.8, 447138.2, 467629.6, 475936.1, 492087.1)/10000,
  第三产业 = c(363397.9, 405626.0, 453702.9, 506429.8, 555538.9, 574850.9, 643468.4, 678192.7, 729166.5, 765582.5)/10000
) 

# 转换为长格式
gdp_long <- gdp_data %>%
  pivot_longer(cols = -年份, names_to = "指标", values_to = "值") %>%
  mutate(指标 = factor(指标, 
                    levels = c("国内生产总值", "第一产业", "第二产业", "第三产业"),
                    labels = c("GDP总量", "农业", "工业", "服务业")))

6.2 图形5——

# 生成时间序列图
ggplot(gdp_long, aes(x = 年份, y = 值, color = 指标)) +
  geom_line(linewidth = 1.2) +
  geom_point(size = 3) +
  # 添加2020年疫情标注
  annotate("rect", xmin = 2019.5, xmax = 2020.5, ymin = 0, ymax = Inf,
           alpha = 0.2, fill = "red") +
  annotate("text", x = 2020, y = 2, label = "新冠疫情", 
           color = "red", vjust = -0.5, size = 4) +
  # 设置坐标轴
  scale_x_continuous(breaks = seq(2015, 2024, 1)) +
  scale_y_continuous(limits = c(0, NA), 
                     labels = label_number(suffix = " 万亿")) +
  # 颜色与标签
  scale_color_manual(values = c("#1B9E77", "#D95F02", "#7570B3", "#E7298A")) +
  labs(title = "中国核心经济指标时间序列(2015-2024)",
       subtitle = "数据来源:国家统计局 | 单位:万亿元",
       x = "年份", y = "产值", color = "指标") +
  # 主题美化
  theme_minimal(base_family = "SimHei") +
  theme(
    plot.title = element_text(size = 16, face = "bold", hjust = 0.5),
    plot.subtitle = element_text(hjust = 0.5, color = "gray40"),
    legend.position = "top",
    panel.grid.minor = element_blank(),
    axis.text.x = element_text(angle = 45, hjust = 1)
  ) +
  # 添加增长率标签
  geom_text(data = gdp_long %>% filter(年份 == 2024),
            aes(label = paste0(round(值, 1), "万亿")), 
            hjust = -0.2, size = 3.5, show.legend = FALSE)

  • 图形解读:

    四大核心指标

    GDP总量(绿色):从70.3万亿增长至134.9万亿,2020年增速明显放缓

    服务业(粉色):增长最快,2024年达76.6万亿,成为经济主引擎

    工业(紫色):2021年后恢复强劲增长,2024年49.2万亿

    农业(橙色):稳定增长,2024年9.1万亿

    关键时间节点

    红色阴影标注2020年疫情冲击,可见:

    服务业受影响最显著(增速陡降)

    工业出现短暂负增长

    2021年后所有指标恢复增长

    结构变化

    服务业与GDP总量曲线间距逐渐扩大,反映其占比提升

    农业曲线最为平缓,显示其发展稳定性