数据可视化期末报告

Author

徐锦辉221527135

1 报告要求

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

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

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

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

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

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

  • 评分标准:

    • 每章节图形各20分

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

    • 数据独特性强10%

    • 图形个性化强15%

2 类别数据可视化

2.1 案例数据解释与展示

  • 关于南极企鹅形态测量的数据集

    变量:

    species: 企鹅物种(阿德利、巴布亚、帽带)

    island: 岛屿(Torgersen、Biscoe、Dream)

    bill_length_mm: 喙长度(毫米)

    bill_depth_mm: 喙深度(毫米)

    flipper_length_mm: 鳍肢长度(毫米)

    body_mass_g: 体重(克)

    sex: 性别

    year: 观测年份

library(dplyr)
library(DT)
library(palmerpenguins)
library(tidyr)
library(forcats)
data(penguins)
head(penguins)
# A tibble: 6 × 8
  species island    bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
  <fct>   <fct>              <dbl>         <dbl>             <int>       <int>
1 Adelie  Torgersen           39.1          18.7               181        3750
2 Adelie  Torgersen           39.5          17.4               186        3800
3 Adelie  Torgersen           40.3          18                 195        3250
4 Adelie  Torgersen           NA            NA                  NA          NA
5 Adelie  Torgersen           36.7          19.3               193        3450
6 Adelie  Torgersen           39.3          20.6               190        3650
# ℹ 2 more variables: sex <fct>, year <int>
penguins<- na.omit(penguins)
colname <- c(
  "species" = "物种",
  "island" = "岛屿",
  "bill_length_mm" = "喙长度(mm)",
  "bill_depth_mm" = "喙深度(mm)",
  "flipper_length_mm" = "鳍肢长度(mm)",
  "body_mass_g" = "体重(g)",
  "sex" = "性别",
  "year" = "观测年份"
)
names(penguins) <- colname[names(penguins)]
DT::datatable(head(penguins), rownames = FALSE)

2.2 图形1——单变量条形图

layout(matrix(c(1,2,3,3),2,2,byrow=TRUE))   # 页面布局
par(mai=c(0.3, 0.5, 0.3, 0.3),cex=0.6,cex.main=1,font.main=1,font.main=1)   # 设置图形边距和字体大小等

table(penguins$物种) |> barplot(xlab="数量",ylab="物种",     # 绘制性别的条形图
   horiz=T,                              # 水平排放各条
   density=30,angle=0,                      # 设置填充密度和密度线的角度
   col=c("grey80","grey50","grey30"),border="blue",  # 设置颜色向量
   main="(a) 水平条形图")                   # 添加标题

table(penguins$`岛屿`)|> barplot(xlab="岛屿",ylab="数量",density=20,angle=90,
  col=2:4,border="red",main="(b) 垂直条形图")    

table(penguins$`物种`) |> barplot(xlab="物种",ylab="数量",cex.names=1.2,cex.lab=1.2,
  col=c("#DE2D26","#31A354","#3182BD"),
  main="(c) 垂直条形图")  # 绘制满意度的条形

  • 图形解读:从图a可以看出Adelie品种的企鹅最多,从图b可以看出Biscore岛屿的企鹅最多

3 数据分布可视化

3.1 案例数据解释与展示

  • 关于南极企鹅形态测量的数据集

    变量:

    species: 企鹅物种(阿德利、巴布亚、帽带)

    island: 岛屿(Torgersen、Biscoe、Dream)

    bill_length_mm: 喙长度(毫米)

    bill_depth_mm: 喙深度(毫米)

    flipper_length_mm: 鳍肢长度(毫米)

    body_mass_g: 体重(克)

    sex: 性别

    year: 观测年份

DT::datatable(head(penguins), rownames = FALSE)

3.2 图形2——直方图

library(gridExtra)
library(e1071)        # 用于计算偏度系数和峰度系数
library(ggplot2)

df <- penguins
mytheme<-theme(plot.title=element_text(size="12"), # 设置主标题字体大小
   axis.title=element_text(size=10),               # 设置坐标轴标签字体大小
   axis.text=element_text(size=9),                # 设置坐标轴刻度字体大小
   legend.text=element_text(size="8"))            # 设置图例字体大小
# 作初始直方图,纵轴默认为频数
h1<-ggplot(data=df,aes(x=`体重(g)`))+mytheme+    # 绘制直方图
  geom_histogram(fill="lightgreen",color="gray50")

# 图(a) 添加地毯图、偏度系数和峰度系数
p1<-h1+geom_rug(size=0.2,color="blue3")+    # 添加地毯图,须线的宽度为0.2
  annotate("text",x=210,y=37,label="偏度系数 =",size=2)+  # 添加注释文本
  annotate("text",x=1000,y=37,label=round(skewness(df$`体重(g)`),4),size=2)+  # 添加偏度系数
  annotate("text",x=210,y=33,label="峰度系数 =",size=2)+  # 添加注释文本
  annotate("text",x=1000,y=33,label=round(kurtosis(df$`体重(g)`),4),size=2)+  # 添加峰度系数
  ylab("count")+ggtitle("(a) 添加地毯图和偏度与峰度系数")

# 图(b)添加频数多边形中位数点
p2<-h1+geom_freqpoly(color="red3")+
  geom_point(x=median(df$`体重(g)`),y=0,shape=21,size=4,fill="yellow")+# 添加中位数点
  annotate("text",x=median(df$`体重(g)`),y=4.2,label="中位数",size=3,color="red3")+ # 添加注释文本
  ggtitle("(b) 添加频数多边形和中位数点")

# 将直方图的纵轴转为密度
h2<-ggplot(data=df,aes(x=`体重(g)`))+mytheme+      
  geom_histogram(aes(y=..density..),fill="lightgreen",color="gray50")
# 图(c) 添加核密度曲线
p3<-h2+geom_density(color="blue2",size=0.7)+ # 添加核密度曲线
  annotate("segment",x=2000,xend=2500,y=0.006,yend=0.001,color="blue",size=0.6,arrow=arrow(angle=15,length=unit(0.1,"inches")))+  # 添加带箭头的线
  annotate("text",x=2000,y=0.0015,label="核密度曲线",size=2)+ # 添加注释文本
   ggtitle("(c) 添加核密度曲线")

# 图(d) 添加理论正态曲线和均值线
p4<-h2+stat_function(fun=dnorm,args=list(mean=mean(df$`体重(g)`),sd=sd(df$`体重(g)`)),
       linetype="twodash",color="red2",size=0.8)+ # 添加理论正态分布曲线
  geom_vline(xintercept=mean(df$`体重(g)`),linetype="twodash",size=0.6,color="red")+          # 添加均值垂线,并设置线形、线宽和颜色
  annotate("text",x=4500,y=0.01,label="均值线",size=3)+  # 添加注释文本
  annotate("text",x=3000,y=0.0017,label="理论正态分布曲线",size=2)+  # 添加注释文本
  ggtitle("(d) 添加理论正态曲线和均值线")

gridExtra::grid.arrange(p1,p2,p3,p4,ncol=2)        # 按2列组合图形p1和p2

  • 图形解读:可以看出企鹅的体重主要集中在 2000 至 5000 克之间,峰值在 3000 至 4000 克。

4 变量关系可视化

4.1 案例数据解释与展示

  • 关于南极企鹅形态测量的数据集

    变量:

    species: 企鹅物种(阿德利、巴布亚、帽带)

    island: 岛屿(Torgersen、Biscoe、Dream)

    bill_length_mm: 喙长度(毫米)

    bill_depth_mm: 喙深度(毫米)

    flipper_length_mm: 鳍肢长度(毫米)

    body_mass_g: 体重(克)

    sex: 性别

    year: 观测年份

DT::datatable(head(penguins), rownames = FALSE)

4.2 图形3——散点图

df2<-penguins

p1<-ggplot(data=df2,aes(x=物种,y=`体重(g)`))+
    geom_point(shape=21,size=1.5,fill="deepskyblue")+  # 设置点的形状、大小和填充颜色
    geom_rug(color="steelblue")+               # 添加地毯图
    stat_smooth(method=lm,color="red",fill="blue",size=0.8)+  # 添加线性拟合线、设置线的颜色和置信带的颜色
    geom_point(aes(x=mean(物种),y=mean(`体重(g)`)),shape=21,fill="yellow",size=4)+   # 绘制均值点
    ggtitle("(a) 散点图+地毯图+线性拟合")
p2<-ggplot(data=df,aes(x=岛屿,y=`体重(g)`))+
    geom_point(shape=21,size=1.5,fill="deepskyblue")+
    geom_rug(position="jitter",size=0.5,color="deepskyblue")+  # 添加地毯图
    stat_smooth(method=loess,color="red",fill="deepskyblue",size=0.8)+
                                                # 添加局部加权回归拟合线
    geom_point(aes(x=mean(岛屿),y=mean(`体重(g)`)),shape=21,fill="yellow",size=4)+
    ggtitle("(b) 散点图+地毯图+loess拟合")

grid.arrange(p1,p2,ncol=2) # 按2列组合图形p1和p2

  • 图形解读:
  • 图 (a) 按物种分组,Gentoo 的体重显著高于 Adelie 和 Chinstrap,反映物种间的体型差异。
  • 图 (b) 按地点分组,Biscoe 地点的体重分布更广,Dream 和 Torgersen 分布较集中。

5 样本相似性可视化

5.1 案例数据解释与展示

  • 关于南极企鹅形态测量的数据集

    变量:

    species: 企鹅物种(阿德利、巴布亚、帽带)

    island: 岛屿(Torgersen、Biscoe、Dream)

    bill_length_mm: 喙长度(毫米)

    bill_depth_mm: 喙深度(毫米)

    flipper_length_mm: 鳍肢长度(毫米)

    body_mass_g: 体重(克)

    sex: 性别

    year: 观测年份

DT::datatable(head(penguins), rownames = FALSE)

5.2 图形4——雷达图

library(ggiraphExtra)
df3<-filter(penguins,岛屿%in%c("Torgersen","Biscoe","Dream")) #

# 设置图形主题
myangle<-seq(-20,-340,length.out=8)   # 设置标签角度,使之垂直于坐标轴
mytheme<-theme_bw()+                  # 使用黑白主题
   theme(legend.position="bottom",    # 设置图例位置
   axis.text.x=element_text(size=9,color="blue4",angle=myangle))
                                  # 设置坐标轴标签字体大小、颜色和和角度
# 图(a)使用原始数据
p1<-ggRadar(data=df3,aes(group=岛屿),    # 按地区分组
  rescale=FALSE,                        # 数据不归一化
  ylim=c(0,20),                   # 设置y轴范围
  alpha=0,                              # 设置颜色透明度
  size=2)+                              # 设置点的大小
  mytheme+xlab("物种")+ylab("喙长度(毫米)")+  # 设置x轴和y轴标签
  ggtitle("(a) 原始数据雷达图") # 添加标题

# 图(b)使用归一化数据
p2<-ggRadar(data=df3,aes(group=岛屿),    # 按地区分组
  rescale=TRUE,                         # 数据标准化(缩放到[0,1]范围)
  ylim=c(-0.3,1),                       # 设置y轴范围
  alpha=0.3,                            # 设置颜色透明度
  size=2)+                              # 设置点的大小
  mytheme+xlab("物种")+ylab("归一化值")+
  ggtitle("(b) 归一化雷达图") # 添加标题

gridExtra::grid.arrange(p1,p2,ncol=2)       # 按2列组合图形p1和p2

  • 图形解读:

    喙长度和体重在 Biscoe 中高度相关,可能是体型较大的特征。

    Dream 的鳍长和喙深度突出,可能是适应特定环境的特化。

    Torgersen 的低值分布可能反映样本量少或个体较小。

6 时间序列可视化

6.1 案例数据解释与展示

DT::datatable(head(penguins), rownames = FALSE)

6.2 图形5——地平线图

library(latticeExtra)
dt<-penguins |> filter(观测年份>="2007" & 观测年份<="2009") |> 
  select(-c(观测年份,`体重(g)`)) |> ts()  # 选择绘图数据并生成时间序列对象
horizonplot(dt,main="latticeExtra 包绘制的地平线图",
  layout=c(1,6),                              # 1列6行的页面布局
  origin=median,
  colorkey=TRUE,                              # 显示色键
  par.settings=list(par.main.text=list(cex=1,font=1)))# 设置主标题字体大小

  • 图形解读:

    数据呈现正态分布特征,大多数值集中在均值附近 (±1σ),极端值 (±3σ) 较少。

    横向趋势表明数据随时间或某个连续变量的变化,可能存在周期性或渐进性变化。