数据可视化期末报告

Author

221527214吴茜蕊

1 报告要求

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

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

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

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

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

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

  • 评分标准:

    • 每章节图形各20分

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

    • 数据独特性强10%

    • 图形个性化强15%

2 类别数据可视化

2.1 案例数据解释与展示

  • ChickWeightR语言内置的一个经典数据集,记录了不同饮食条件下小鸡(雏鸡)的生长情况。该数据集来源于动物营养学实验,数据集包含578条观测值,涉及4个变量——包含了weight体重(单位:克)、Time观测时间(天数,从孵化开始计算)、Chick小鸡的编号(共50只,编号1-50)和 Diet饮食分组(1-4,代表4种不同的饲料配方)这些变量
data = ChickWeight
datatable(data)

2.2 图形1——饼环图

# 使用 ChickWeight 数据集,筛选0-10天数据
df1 <- ChickWeight %>%
  filter(Time >= 0 & Time <= 10) %>%
  group_by(Diet, Time) %>%  # 按饮食分组和时间分组
  summarise(小鸡数 = n()) %>%  # 计算每组的小鸡数量(非求和!)
  ungroup() %>%
  rename(饮食分组 = Diet, 观测时间 = Time) %>%
  mutate(百分比 = 小鸡数 * 100 / sum(小鸡数))  # 计算百分比

datatable(df1, rownames = FALSE)
# 绘制饼环图
p1 <- ggPieDonut(
  data = df1,
  aes(pies = 饮食分组, donuts = 观测时间),  # 饼图=饮食分组,环图=时间
  title = "(a) 饮食分组为饼图,观测时间为环形图",
  
)

p2 <- ggPieDonut(
  data = df1,
  aes(pies = 观测时间, donuts = 饮食分组),  # 饼图=时间,环图=饮食分组
  title = "(b) 观测时间为饼图,饮食分组为环形图"
)


grid.arrange(p1, p2, ncol = 2)

  • 图形解读:
    (1)图(a)饮食分组为饼图,观测时间为环形图,其中饼图图中显示了四种不同的饮食分组(1, 2, 3, 4),每种分组的小鸡数量占总数的25%。环形图显示了不同观测时间(0, 2, 4, 6, 8, 10天)的小鸡数量分布,每个时间点的小鸡数量占总数的4.2%。
    (2)图(b)观测时间为饼图,饮食分组为环形图。其中饼图显示了不同观测时间(1, 2, 4, 6, 8, 10天)的小鸡数量分布,每个时间点的小鸡数量占总数的16.7%。饮食分组:环形图显示了四种不同的饮食分组(1, 2, 3, 4),每种分组的小鸡数量占总数的4.2%。
    (3)从图(a)和图(b)可以看出,图(a)更直观地展示了饮食分组的分布情况,而图(b)则更直观地展示了观测时间的分布情况。这表明在数据可视化中,需要选择合适的图表类型,这样可以更好地突出数据的关键特征和差异。

3 数据分布可视化

3.1 案例数据解释与展示

  • ChickWeightR语言内置的一个经典数据集,记录了不同饮食条件下小鸡(雏鸡)的生长情况。该数据集来源于动物营养学实验,数据集包含578条观测值,涉及4个变量——包含了weight体重(单位:克)、Time观测时间(天数,从孵化开始计算)、Chick小鸡的编号(共50只,编号1-50)和 Diet饮食分组(1-4,代表4种不同的饲料配方)这些变量
data = ChickWeight
datatable(data)

3.2 图形2——箱线图

mytheme <- theme(
  plot.title = element_text(size = 11, face = "bold", hjust = 0.5),  # 添加标题加粗和居中
  axis.title = element_text(size = 10),
  axis.text = element_text(size = 9),
  legend.text = element_text(size = 8),
  panel.background = element_rect(fill = "white", colour = "grey80"),  # 添加浅色背景
  panel.grid.major = element_line(colour = "grey90")  # 添加浅灰色网格线
)

df2 <- ChickWeight %>%
  filter(Time >= 0 & Time <= 10)  %>%
  gather(weight, Time, key = 指标, value = 指标值) %>%
  ddply("指标", transform, 标准化值 = scale(指标值))

palette <- RColorBrewer::brewer.pal(6, "Set2")[4:5]


p1 <- ggplot(df2, aes(x = 指标, y = log10(指标值))) +
  geom_boxplot(fill = palette, 
               outlier.size = 0.8,
               outlier.color = "red",  # 离群点设为红色
               outlier.shape = 8) +    # 离群点形状设为星号
  scale_x_discrete(guide = guide_axis(n.dodge = 2)) +
  stat_summary(fun = "mean", 
               geom = "point", 
               shape = 21, 
               size = 2.5, 
               fill = "white",
               color = "black") +  # 添加黑色边框
  ylab("对数值") +
  ggtitle("(a) 对数变换") +
  mytheme


p2 <- ggplot(df2, aes(x = 指标, y = 标准化值)) +
  geom_boxplot(fill = palette, 
               outlier.size = 0.8,
               outlier.color = "red",
               outlier.shape = 8) +
  scale_x_discrete(guide = guide_axis(n.dodge = 2)) +
  stat_summary(fun = "mean", 
               geom = "point", 
               shape = 21, 
               size = 2.5, 
               fill = "white",
               color = "black") +
  ggtitle("(b) 标准化变换") +
  mytheme


grid.arrange(
  p1, p2, 
  ncol = 2,
  top = textGrob("体重与时间指标分布比较", 
                gp = gpar(fontsize = 14, fontface = "bold"))
)

  • 图形解读:
    (1)图(a)显示了“Time”和“weight”两个指标的对数变换结果,每个指标的箱线图都展示了数据的分布情况,还用圆圈标记了离群点。
    (2)图(b)显示了“Time”和“weight”两个指标的标准化后的变换结果,每个指标的箱线图都展示了数据的分布情况,并标记了离群点。
    (3)从图(a)和图(b)可以看出,对数变换和标准化后的变换对数据分布的影响显著不同。图(a)数据分布更加对称,离群点的数量较少,且位置较为明显。而图(b)将数据标准化后,离群点的数量较多,且离群点的位置更加显著。

4 变量关系可视化

4.1 案例数据解释与展示

  • ChickWeightR语言内置的一个经典数据集,记录了不同饮食条件下小鸡(雏鸡)的生长情况。该数据集来源于动物营养学实验,数据集包含578条观测值,涉及4个变量——包含了weight体重(单位:克)、Time观测时间(天数,从孵化开始计算)、Chick小鸡的编号(共50只,编号1-50)和 Diet饮食分组(1-4,代表4种不同的饲料配方)这些变量
data = ChickWeight
datatable(data)

4.2 图形3——气泡图

df3 <- ChickWeight %>%
  filter(Time >= 0 & Time <= 10)

# 绘制气泡图
library(ggplot2)
ggplot(df3, aes(x = Time, y = weight, size = weight, color = Diet)) +
  geom_point(alpha = 0.6) +
  scale_size(range = c(2, 8)) +
  labs(title = "Chick Weight Over Time (0-10 Days)",
       x = "Time (days)",
       y = "Weight (gm)") +
  theme_minimal()

  • 图形解读:
    (1)图中显示了随着时间的推移,小鸡的体重总体上呈现出增长的趋势。而且不同饮食分组的小鸡体重增长情况有所不同,第4饮食分组的小鸡体重普遍增长更快。
    (2)从图中可以看出,饮食分组和观测时间对小鸡的体重增长有显著影响。不同饮食分组的小鸡在相同时间点的体重差异较大,这表明饮食对小鸡的生长速度有重要影响。不仅如此,随着观测天数的增加,同一饮食分组的小鸡的体重也随着增加。

5 样本相似性可视化

5.1 案例数据解释与展示

  • ChickWeightR语言内置的一个经典数据集,记录了不同饮食条件下小鸡(雏鸡)的生长情况。该数据集来源于动物营养学实验,数据集包含578条观测值,涉及4个变量——包含了weight体重(单位:克)、Time观测时间(天数,从孵化开始计算)、Chick小鸡的编号(共50只,编号1-50)和 Diet饮食分组(1-4,代表4种不同的饲料配方)这些变量
data = ChickWeight
datatable(data)

5.2 图形4——星图

library(dplyr)
library(stats)

df4 <- ChickWeight %>%
  filter(Time >= 0 & Time <= 10) %>%
  select(weight, Time, Diet)  # 选择关键变量

# 数据标准化并转换为矩阵
mat <- df4 %>%
  select(weight, Time) %>%    # 选择数值变量
  scale() %>%                 # 标准化数据
  as.matrix()

rownames(mat) <- paste0("W", round(df4$weight, 1))  # 用weight值作为行名前缀

# 绘制星图(分15行显示)
stars(mat,
   full=TRUE,                                # 绘制出满圆
   nrow=15,                                   # 15行布局
   len=1,                                    # 设置半径或线段长度的比例
   frame.plot=TRUE,                          # 添加边框
   draw.segments=TRUE,key.loc=c(-2,23.5),   # 绘制圆弧图,并设置位置
   mar=c(0.5,0.1,0.1,0.1),                   # 设置图形边界
   cex=0.6)                        

  • 图形解读:
    (1)图中不同的颜色和形状代表不同的饮食分组和小鸡,大概可以看出大多数饮食分组的小鸡体重随着观测天数的增加而增加,但增长速度和幅度有所不同。不同饮食分组的小鸡体重增长趋势存在一定差异,某些饮食分组例如Diet 4的小鸡体重增长更为显著。同一饮食分组下的小鸡体重也存在个体差异,部分小鸡体重增长较快,而部分小鸡体重增长较慢。
    (2)图中表明了不同饮食分组对小鸡体重增长的影响存在显著差异。此外,由于同一饮食分组下的小鸡体重也存在个体差异,这提示我们在研究饮食对体重增长的影响时,还需要考虑个体差异的因素。

6 时间序列可视化

6.1 案例数据解释与展示

  • ChickWeightR语言内置的一个经典数据集,记录了不同饮食条件下小鸡(雏鸡)的生长情况。该数据集来源于动物营养学实验,数据集包含578条观测值,涉及4个变量——包含了weight体重(单位:克)、Time观测时间(天数,从孵化开始计算)、Chick小鸡的编号(共50只,编号1-50)和 Diet饮食分组(1-4,代表4种不同的饲料配方)这些变量
data = ChickWeight
datatable(data)

6.2 图形5——流线图

# 加载必要的包
library(ggplot2)
library(ggstream)
library(dplyr)

df5 <- ChickWeight %>%
  filter(Time >= 0 & Time <= 10) %>%
  group_by(Time, Diet) %>%  # 按时间和饮食分组
  summarise(weight = mean(weight), .groups = "drop")  # 计算平均体重


ggplot(df5, aes(x = Time, y = weight, fill = Diet)) +
  geom_stream(type = "ridge", bw = 0.6, size = 0.5) +  # 调整平滑参数
  scale_fill_brewer(palette = "Set2") +  # 使用更清晰的配色
  theme_minimal(base_size = 12) +
  labs(title = "Chick Weight Development (Time 0-10)",
       x = "Time (days)", 
       y = "Average Weight (gm)",
       fill = "Diet Type") +
  theme(legend.position = "right",
        plot.title = element_text(hjust = 0.5))

  • 图形解读:
    (1)图中展示了不同饮食分组下小鸡体重随观测天数的变化趋势。4种饮食分组的小鸡体重在0到10天内都有明显的波动,不同饮食分组的小鸡体重变化趋势相似,在大约2.5天、5天、7.5天和10天时,小鸡体重出现了明显的峰值。
    (2)尽管不同饮食分组的小鸡体重变化趋势相似,但在同一观测天数下,饮食分组4小鸡的体重增长更为显著。这可能表明特定饮食分组对小鸡体重增长有更积极的影响。