数据可视化期末报告

Author

221527133郭政

1 报告要求

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

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

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

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

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

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

  • 评分标准:

    • 每章节图形各20分

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

    • 数据独特性强10%

    • 图形个性化强15%

2 类别数据可视化

2.1 案例数据解释与展示

  • Hair:发色 Eye:眸色 Sex:性别
library(DT)
library(data.table)
library(ggplot2)
library(reshape2)
data1<- as.data.table(HairEyeColor)
datatable(data1, options = list(pageLength = 5, rownames = FALSE))

2.2 图形1——

hair_eye_sex <- as.data.frame(HairEyeColor)
colnames(hair_eye_sex) <- c("Hair", "Eye", "Sex", "Freq")

ggplot(hair_eye_sex, aes(x = Hair, y = Freq, fill = Eye)) +
  geom_bar(stat = "identity") +
  facet_wrap(~ Sex) +
  labs(title = "按性别分面的发色与眸分布",
       x = "发色", 
       y = "频数") +
  scale_fill_manual(values = c(Brown = "brown", 
                               Blue = "blue", 
                               Hazel = "tan", 
                               Green = "green")) +
  theme_minimal()

  • 图形解读:由该堆叠条形图可知棕色发色最常见的眸色是棕色和蓝色,金发的人更可能有蓝色的眼睛,黑色头发的人眼睛颜色多为棕色,红发的人眼睛颜色分布较为多样

3 数据分布可视化

3.1 案例数据解释与展示

  • Sepal.Length:花萼长度 Species:品种
data2<- as.data.table(iris)
datatable(data2, options = list(pageLength = 5, rownames = FALSE))

3.2 图形2——

ggplot(iris, aes(x = Sepal.Length, fill = Species)) +
  geom_histogram(binwidth = 0.2, alpha = 0.7, position = "identity") +
  facet_wrap(~Species, ncol = 3) +
  labs(title = "鸢尾花品种的花萼长度分布",
       x = "花萼长度 (cm)",
       y = "频数") +
  theme_minimal()

  • 图形解读:由该直方图Setosa的花萼长度通常较短,而Virginica的花萼长度通常较长,Versicolor介于两者之间。

4 变量关系可视化

4.1 案例数据解释与展示

  • mpg:油耗 hp:马力
data3<- as.data.table(mtcars)
datatable(data3, options = list(pageLength = 5, rownames = FALSE))

4.2 图形3——

ggplot(mtcars, aes(x = hp, y = mpg)) +
  geom_point(size = 3, alpha = 0.7, color = "steelblue") +
  geom_smooth(method = "lm", se = FALSE, color = "red") +
  labs(title = "油耗与马力的关系",
       x = "马力 (hp)",
       y = "每加仑英里数 (mpg)") +
  theme_minimal()

  • 图形解读:由该回归线散点图可知马力(hp)与油耗(mpg)之间存在明显的负相关关系;随着马力的增加,油耗效率(每加仑英里数)趋于下降

5 样本相似性可视化

5.1 案例数据解释与展示

  • Sepal花萼Petal花瓣Length长度Width宽度
data4<- as.data.table(iris)
datatable(data4, options = list(pageLength = 5, rownames = FALSE))

5.2 图形4——

species_means <- aggregate(. ~ Species, data=iris, mean)
melted_means <- melt(species_means, id.vars="Species")
ggplot(melted_means, aes(x=variable, y=Species, fill=value)) +
  geom_tile() +
  scale_fill_gradient(low="yellow", high="red") +
  geom_text(aes(label=round(value, 2)), color="black", size=3) +
  labs(title="鸢尾花品种特征均值热力图",
       x="特征", y="品种") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle=45, hjust=1))

  • 热力图中颜色的深浅代表了特征值的大小或相关性强度,直观地比较不同品种的相似性。由该热力图可知setosa在花瓣尺寸上明显小于其他两个品种,virginica的花瓣尺寸最大,versicolor介于两者之间

6 时间序列可视化

6.1 案例数据解释与展示

  • 年份,月份,乘客数量
library(forecast)
data("AirPassengers")
ap <- AirPassengers

dt_ap <- data.table(
  Year = floor(time(ap)),
  Month = cycle(ap),
  Passengers = as.numeric(ap)
)
print(dt_ap)
     Year Month Passengers
     <ts>  <ts>      <num>
  1: 1949     1        112
  2: 1949     2        118
  3: 1949     3        132
  4: 1949     4        129
  5: 1949     5        121
 ---                      
140: 1960     8        606
141: 1960     9        508
142: 1960    10        461
143: 1960    11        390
144: 1960    12        432

6.2 图形5——

ap_df <- data.frame(
  date = as.Date(paste(floor(time(AirPassengers)), 
                 cycle(AirPassengers), "01", sep = "-")),
  passengers = as.numeric(AirPassengers)
)


ap_df$year <- as.factor(format(ap_df$date, "%Y"))
ap_df$month <- factor(month.abb[as.numeric(format(ap_df$date, "%m"))], 
                     levels = month.abb)

ggplot(ap_df, aes(x = month, y = passengers, group = year, fill = year)) +
  geom_area(position = "identity", alpha = 0.4) +
  geom_line(aes(color = year), size = 0.5) +
  labs(title = "AirPassengers季节性趋势(1949-1960)",
       subtitle = "按月分年的乘客数量面积图",
       x = "月份", y = "乘客数量(千人)",
       fill = "年份", color = "年份") +
  scale_fill_viridis_d() +
  scale_color_viridis_d() +
  theme_minimal() +
  theme(legend.position = "bottom",
        plot.title = element_text(hjust = 0.5),
        plot.subtitle = element_text(hjust = 0.5))

  • 图形解读:由该时间序列面积图可知乘客数量明显增长,十年来翻了三倍;6-8越乘客最多,11-2越最低。