数据可视化期末报告

Author

kaka

1 报告要求

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

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

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

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

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

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

  • 评分标准:

    • 每章节图形各20分

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

    • 数据独特性强10%

    • 图形个性化强15%

2 类别数据可视化

2.1 案例数据解释与展示

# 加载必要包
library(ggplot2)
library(DT)
library(dplyr)
library(tidyr)
library(RColorBrewer)
library(ggridges)    # 脊形图
library(plotly)      # 3D散点图
library(ggiraphExtra)     # 雷达图
library(ggstream)    # 流线图
library(ggcorrplot)  # 相关系数矩阵

# 模拟数据集
set.seed(123)
countries <- c("挪威","瑞士","日本","德国","澳大利亚","新加坡","瑞典","荷兰","丹麦","加拿大")
years <- 2010:2020

dev_data <- expand.grid(Country=countries, Year=years) %>%
  mutate(
    GDP = runif(n(), 1e10, 5e11),
    Life_Exp = runif(n(), 75, 85),
    Edu_Index = runif(n(), 0.7, 0.95),
    CO2 = runif(n(), 2, 12),
    Renew_Energy = runif(n(), 10, 50),
    Health_Exp = runif(n(), 5, 12)
  ) %>%
  group_by(Country) %>%
  mutate(
    GDP_Growth = GDP/lag(GDP) - 1,
    .after = GDP
  )

2.2 图形1——南丁格尔玫瑰图

# 数据准备
energy_2020 <- dev_data %>%
  filter(Year == 2020) %>%
  select(Country, Renew_Energy)

# 数据展示
datatable(energy_2020,
          options = list(pageLength = 5),
          caption = "表1: 2020年各国可再生能源占比(%)")
# 南丁格尔玫瑰图
ggplot(energy_2020, aes(x = Country, y = Renew_Energy, fill = Country)) +
  geom_bar(width = 1, stat = "identity") +
  coord_polar(start = 0) +
  scale_fill_brewer(palette = "Set3") +
  labs(title = "图形1——南丁格尔玫瑰图:2020年各国可再生能源占比",
       subtitle = "半径长度代表可再生能源在总能源中的百分比",
       x = NULL, y = NULL) +
  theme_minimal() +
  theme(axis.text.x = element_text(size = 8))

  • 图形解读:
    1. 该玫瑰图直观展示了各国可再生能源使用比例的相对大小
    2. 北欧国家表现突出,加拿大和澳大利亚相对落后
    3. 观点:高纬度国家在可再生能源利用方面更具优势

3 数据分布可视化

3.1 案例数据解释与展示

# 模拟数据集
set.seed(123)
countries <- c("挪威","瑞士","日本","德国","澳大利亚","新加坡","瑞典","荷兰","丹麦","加拿大")
years <- 2010:2020

dev_data <- expand.grid(Country=countries, Year=years) %>%
  mutate(
    GDP = runif(n(), 1e10, 5e11),
    Life_Exp = runif(n(), 75, 85),
    Edu_Index = runif(n(), 0.7, 0.95),
    CO2 = runif(n(), 2, 12),
    Renew_Energy = runif(n(), 10, 50),
    Health_Exp = runif(n(), 5, 12)
  ) %>%
  group_by(Country) %>%
  mutate(
    GDP_Growth = GDP/lag(GDP) - 1,
    .after = GDP
  )

3.2 图形2——云雨图

# 数据准备
health_data <- dev_data %>% 
  select(Country, Health_Exp)

# 数据展示
datatable(health_data,
          options = list(pageLength = 5),
          caption = "表2: 各国医疗卫生支出占GDP百分比")
# 云雨图 (Raincloud plot)
ggplot(health_data, aes(x = Country, y = Health_Exp, fill = Country)) +
  geom_violin(width = 0.5, alpha = 0.6, trim = FALSE) +
  geom_boxplot(width = 0.1, fill = "white", outlier.shape = NA) +
  geom_jitter(width = 0.1, size = 1.5, alpha = 0.5) +
  scale_fill_brewer(palette = "Pastel1") +
  labs(title = "图形2——云雨图:各国医疗卫生支出分布",
       subtitle = "结合密度曲线、箱线图和原始数据点",
       x = "国家", y = "医疗卫生支出占GDP(%)") +
  coord_flip() +
  theme_minimal()

  • 图形解读:
    1. 该图同时展示数据分布形态、统计量和原始数据点
    2. 日本和瑞士的医疗支出分布最集中
    3. 观点:全民医保国家的医疗支出分布更为均衡

4 变量关系可视化

4.1 案例数据解释与展示

# 模拟数据集
set.seed(123)
countries <- c("挪威","瑞士","日本","德国","澳大利亚","新加坡","瑞典","荷兰","丹麦","加拿大")
years <- 2010:2020

dev_data <- expand.grid(Country=countries, Year=years) %>%
  mutate(
    GDP = runif(n(), 1e10, 5e11),
    Life_Exp = runif(n(), 75, 85),
    Edu_Index = runif(n(), 0.7, 0.95),
    CO2 = runif(n(), 2, 12),
    Renew_Energy = runif(n(), 10, 50),
    Health_Exp = runif(n(), 5, 12)
  ) %>%
  group_by(Country) %>%
  mutate(
    GDP_Growth = GDP/lag(GDP) - 1,
    .after = GDP
  )

4.2 图形3——3D散点图

# 数据准备
relation_data <- dev_data %>%
  filter(Year == 2020) %>%
  select(Country, GDP, CO2, Health_Exp)

# 数据展示
datatable(relation_data,
          options = list(pageLength = 5),
          caption = "表3: 2020年经济-环境-健康指标")
# 3D散点图
plot_ly(relation_data, 
        x = ~GDP, y = ~CO2, z = ~Health_Exp,
        color = ~Country, 
        colors = brewer.pal(10, "Set3"),
        size = 20,
        type = "scatter3d",
        mode = "markers") %>%
  layout(title = "图形3——3D散点图:GDP、碳排放与医疗支出的三维关系",
         scene = list(xaxis = list(title = 'GDP(十亿美元)'),
                      yaxis = list(title = '人均CO2排放(吨)'),
                      zaxis = list(title = '医疗支出占比(%)')))
  • 图形解读:
    1. 三维视角清晰展示三个变量间的复杂关系
    2. 高GDP国家在医疗支出和碳排放上分化明显
    3. 观点:经济发展水平不是决定医疗投入和环境表现的唯一因素

5 样本相似性可视化

5.1 案例数据解释与展示

set.seed(123)
countries <- c("挪威","瑞士","日本","德国","澳大利亚","新加坡","瑞典","荷兰","丹麦","加拿大")
years <- 2010:2020

dev_data <- expand.grid(Country = countries, Year = years) %>%
  mutate(
    GDP = runif(n(), 1e10, 5e11),
    Life_Exp = runif(n(), 75, 85),
    Edu_Index = runif(n(), 0.7, 0.95),
    CO2 = runif(n(), 2, 12),
    Renew_Energy = runif(n(), 10, 50),
    Health_Exp = runif(n(), 5, 12)
  ) %>%
  group_by(Country) %>%
  mutate(
    GDP_Growth = GDP/lag(GDP) - 1,
    .after = GDP
  ) %>%
  ungroup()

5.2 图形4——雷达图

radar_data <- dev_data %>%
  filter(Year == 2020) %>%
  select(Country, GDP, Life_Exp, Edu_Index, CO2, Renew_Energy, Health_Exp) %>%
  # 标准化到0-1范围(CO2是负向指标,需要反向处理)
  mutate(
    across(-Country, ~ scales::rescale(.x, to = c(0, 1))),
    CO2 = 1 - CO2  # CO2值越小越好,所以反向处理
  ) %>%
  rename(
    `GDP` = GDP,
    `预期寿命` = Life_Exp,
    `教育指数` = Edu_Index,
    `低碳排放` = CO2,  # 注意这里已经反向处理
    `可再生能源` = Renew_Energy,
    `医疗支出` = Health_Exp
  )

# 3. 绘制雷达图
ggRadar(
  data = radar_data,
  aes(group = Country),
  interactive = FALSE,  # 设置为TRUE可获得交互式图表
  legend.position = "right",
  size = 1,
  rescale = FALSE,  # 因为我们已经手动标准化了数据
  alpha = 0.1,
  ylim = c(0, 1)  # 因为数据已经标准化到0-1
) +
  labs(title = "2020年各国发展指标雷达图") +
  theme(
    plot.title = element_text(hjust = 0.5, size = 16, face = "bold"),
    legend.text = element_text(size = 10)
  )

  • 图形解读:
    1. 雷达图清晰展示各国在不同指标上的相对优势
    2. 北欧国家呈现均衡发展模式
    3. 观点:可持续发展需要经济、社会、环境多维度协调

6 时间序列可视化

6.1 案例数据解释与展示

# 模拟数据集
set.seed(123)
countries <- c("挪威","瑞士","日本","德国","澳大利亚","新加坡","瑞典","荷兰","丹麦","加拿大")
years <- 2010:2020

dev_data <- expand.grid(Country=countries, Year=years) %>%
  mutate(
    GDP = runif(n(), 1e10, 5e11),
    Life_Exp = runif(n(), 75, 85),
    Edu_Index = runif(n(), 0.7, 0.95),
    CO2 = runif(n(), 2, 12),
    Renew_Energy = runif(n(), 10, 50),
    Health_Exp = runif(n(), 5, 12)
  ) %>%
  group_by(Country) %>%
  mutate(
    GDP_Growth = GDP/lag(GDP) - 1,
    .after = GDP
  )

6.2 图形5——流线图

# 数据准备
stream_data <- dev_data %>%
  select(Year, Country, GDP_Growth) %>%
  filter(!is.na(GDP_Growth))

# 数据展示
datatable(stream_data,
          options = list(pageLength = 5),
          caption = "表5: 各国GDP增长率时间序列")
# 流线图
ggplot(stream_data, aes(x = Year, y = GDP_Growth, fill = Country)) +
  geom_stream(type = "ridge", bw = 0.5, extra_span = 0.1) +
  scale_fill_brewer(palette = "Set3") +
  labs(title = "图形5——流线图:各国GDP增长率变化趋势(2010-2020)",
       subtitle = "流线宽度反映相对增长率大小",
       x = "年份", y = "GDP增长率") +
  theme_minimal()

  • 图形解读:
    1. 流线图生动展示各国经济增长率的动态变化和相对关系
    2. 2015年前后全球经济增长普遍放缓
    3. 观点:国家经济增长受全球经济环境影响显著