数据可视化期末报告

Author

221527231雷景润

1 报告要求

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

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

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

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

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

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

  • 评分标准:

    • 每章节图形各20分

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

    • 数据独特性强10%

    • 图形个性化强15%

2 类别数据可视化

2.1 案例数据解释与展示

  • 数据来源
    该数据集来源于:

    • R语言内置的datasets包中的HairEyeColor数据

    • 原始数据收集自592名统计学学生的特征统计

    变量意义

    变量名 说明
    Hair 头发颜色(类别变量)
    取值:Black(黑), Brown(棕), Red(红), Blond(金)
    Eye 眼睛颜色(类别变量)
    取值:Brown(棕), Blue(蓝), Hazel(淡褐), Green(绿)
    Sex 性别(类别变量)
    取值:Male(男), Female(女)
    Freq 对应组合的人数(数值变量)
library(tidyverse)
library(DT)
data = as.data.frame(HairEyeColor)
DT::datatable(data,rownames = FALSE)
library(ggplot2)

2.2 图形1——

library(tidyverse)
library(DT)
library(sjPlot)                      # 社会统计数据可视化
library(sf)                        
library(ggiraphExtra)
library(gridExtra)                   # 为使用图形组合函数grid.arrange
library(treemap)                     # 树状图
library(vcd)
library(ggpubr)
library(RColorBrewer)
library(d3r)                           # 为了使用d3_nest函数
library(sunburstR)
library("ggiraphExtra")

options(DT.options = list(pageLength = 6))
# 数据准备
df <- data %>% select(Sex,Hair,Freq) %>% 
  summarise(n=sum(Freq),.by=c(Sex,Hair)) %>% 
  rename(性别=Sex,头发颜色=Hair,人数=n)

DT::datatable(df,rownames = FALSE)
# 图(a)垂直并列条形图
p1<-ggplot(df,aes(x=性别,y=人数,fill=头发颜色))+
  geom_col(width=0.8,    # 设置条形宽度
  position="dodge",      # 绘制并列条形图
  color="gray50")+       # 设置条形图的边框颜色
  scale_fill_brewer(palette="Set2")+  # 设置填充颜色
  geom_text(aes(label=人数),position=position_dodge(0.9),vjust=-0.5,size=3)+          # 设置标签垂直位置和字体大小
  ylim(0,1.1*max(df$人数))+      # 设置y轴范围
  ggtitle("(a) 垂直并列条形图")

# 图(b) 水平并列条形图
p2<-ggplot(df,aes(x=性别,y=人数,fill=头发颜色))+
  geom_col(width=0.7,color="gray50")+ # 绘制堆叠条形图(默认)
  geom_text(aes(label=人数),position=position_stack(0.5),size=3)+
  scale_fill_brewer(palette="Set2")+
  ggtitle("(b) 垂直堆叠条形图")

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

  • 图形解读:从图像中我们可知男性中黑、棕、红、金发人数分别为56、143、37、46人;女性中对应为50、143、34、100人,其中棕色头发在男女中均占主导(143人),而金色头发在女性中呈现绝对优势(81人 vs 男性46人),反映出明显的性别偏好特征。

3 数据分布可视化

3.1 案例数据解释与展示

  • 该数据集来源于:

    • R语言内置的datasets包中的iris数据

    • 1936年植物学家Edgar Anderson在加拿大加斯佩半岛采集的鸢尾花样本

    • 统计学家Ronald Fisher的经典分析案例

    变量意义

    变量名 说明
    Sepal.Length 花萼长度(厘米,连续变量)
    Sepal.Width 花萼宽度(厘米,连续变量)
    Petal.Length 花瓣长度(厘米,连续变量)
    Petal.Width 花瓣宽度(厘米,连续变量)
    Species 鸢尾花种类(类别变量)
    取值:setosa, versicolor, virginica
library(tidyverse)
library(DT)
library(gridExtra)                   # 为使用图形组合函数grid.arrange
library(ggiraphExtra)
library(e1071)                       # 用于计算偏度系数和峰度系数
library(ggridges)                    # 山峦图
library(ggpubr)                      # 带有方差分析信息的箱线图和小提琴图                       

library(ggbeeswarm)                  # 蜂群图
library(ggpubr)
library(RColorBrewer)
library(plyr)

# 设置图形主题
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"))            # 设置图例字体大小

options(DT.options = list(pageLength = 6))
data1 = iris
datatable(data1,rownames = FALSE)

3.2 图形2——

library(ggplot2)
library(e1071)

# 使用iris数据集
df <- iris
# 计算关键统计量
skew_val <- round(skewness(df$Petal.Width), 4)
kurt_val <- round(kurtosis(df$Petal.Width), 4)
mean_val <- round(mean(df$Petal.Width), 2)
median_val <- median(df$Petal.Width)
# 创建直方图与密度曲线
ggplot(data = df, aes(x = Petal.Width)) + 
  geom_histogram(
    aes(y = ..density..),
    fill = "lightgreen",
    color = "gray50",
    bins = 15  # 调整箱数适应数据范围
  ) +
  geom_density(color = "blue2", size = 0.7) +
  
  # 添加统计指标注释
  annotate("text", x = 1.2, y = 1.2, 
           label = paste0("偏度系数 = ", skew_val), size = 4) +
  annotate("text", x = 1.2, y = 1.1, 
           label = paste0("峰度系数 = ", kurt_val), size = 4) +
  # 添加均值线
  geom_vline(
    xintercept = mean_val,
    linetype = "twodash",
    size = 0.6,
    color = "red"
  ) +
  annotate("text", x = mean_val, y = 0.1,
           label = paste0("均值 = ", mean_val), 
           size = 4, color = "red") +
  # 添加中位数点
  geom_point(
    x = median_val,
    y = 0,
    shape = 21,
    size = 4,
    fill = "yellow"
  ) +
  annotate("text", x = median_val, y = 0.05,
           label = paste0("中位数 = ", median_val), 
           size = 4) +
  # 美化主题
  theme_minimal() +
  labs(
    title = "鸢尾花花瓣宽度分布分析",
    x = "花瓣宽度 (厘米)",
    y = "概率密度"
  )

  • 图形解读:从图像中我们可以看出图像清晰显示两个主要峰值,第一峰位于0.2-0.4cm(对应setosa品种),第二峰位于1.5-1.7cm(对应versicolor/virginica品种),该分布揭示了鸢尾花品种的形态分化特征,setosa的花瓣显著更小(0.1-0.6cm),而versicolor和virginica的花瓣较大(1.0-2.5cm)且存在部分重叠,这种双峰模式是植物分类学的典型表征。

4 变量关系可视化

4.1 案例数据解释与展示

  • 变量示例:

    • country:国家

    • year:年份

    • lifeExp:预期寿命

    • pop:人口

    • gdpPercap:人均 GDP

data2 = Loblolly
datatable(data2)

4.2 图形3——

# 加载数据
df <- Loblolly
head(df)
Grouped Data: height ~ age | Seed
   height age Seed
1    4.51   3  301
15  10.89   5  301
29  28.72  10  301
43  41.74  15  301
57  52.70  20  301
71  60.92  25  301
library(ggplot2)
library(ggExtra)
# 绘制主图
p1 <- ggplot(data = df, aes(x = age, y = height)) +
  geom_point(shape = 21,size = 3,fill = "#4DAF4A",color = "white",alpha = 0.8,stroke = 0.5) +
  geom_rug(color = "#377EB8", alpha = 0.6) +
  stat_smooth(method = "loess",formula = y ~ x,color = "#E41A1C",fill = "#FF7F00",
size = 1.2,alpha = 0.2) +
  geom_point(aes(x = mean(age), y = mean(height)),shape = 23,fill = "#FFFF33",color = "black",size = 5,stroke = 1) +
  labs(title = "Loblolly松树:树龄与树高的关系",x = "树龄(年)",y = "树高(英尺)") +
  scale_x_continuous(limits = c(5, 25)) +
  scale_y_continuous(limits = c(0, 65)) +
  theme_minimal(base_size = 12) +
  theme(
    plot.title = element_text(hjust = 0.5, face = "bold", size = 14),
    panel.grid.major = element_line(color = "grey90"),
    panel.grid.minor = element_blank(),
    axis.line = element_line(color = "grey30"),
    axis.title = element_text(face = "bold")
  )
ggMarginal(p1,type = "density",color = "#984EA3",fill = "#DECBE4",alpha = 0.7,size = 4)

  • 图形解读:从图像中我们可以看出,树龄和树高的关系呈非线性增长,散点图显示树高随树龄增长呈先快后慢的趋势(曲线斜率逐渐减小),符合树木生长的典型模式(早期快速生长,后期趋缓)。红色Loess曲线清晰展示了这一非线性关系,置信区间(橙色区域)较窄,说明模型对数据拟合良好。均值点位置(黄色菱形)位于坐标(约15年,35英尺)附近,表明数据集中分布在中等树龄和中等高度区域。

5 样本相似性可视化

5.1 案例数据解释与展示

data3 <- USArrests
datatable(data3)

5.2 图形4——

# 加载数据和包
library(dplyr)
library(graphics)
# 数据预处理
mat <- USArrests %>% 
  scale() %>%      # 标准化数据(均值为0,标准差为1)
  as.matrix()
rownames(mat) <- rownames(USArrests)  # 设置州名为行名
# 绘制星图
par(mar = c(0.1, 0.1, 2, 0.1))  # 调整图形边距
stars(mat,
      full = TRUE,               # 满圆显示
      scale = FALSE,             # 已手动标准化,无需再次缩放
      nrow = 5,                  # 每页7行布局(共50州,分多页显示)
      len = 0.6,                 # 缩短半径长度避免重叠
      key.loc = c(18, 1.5),        # 图例位置调整
      draw.segments = TRUE,      # 使用扇形分段(更直观)
      col.segments = hcl.colors(4, "Viridis"),  # 使用Viridis配色
      labels = rownames(mat),    # 显示州名标签
      cex = 0.6,                 # 标签字体大小
      main = "美国各州犯罪率星图分析",  # 标题
      frame.plot = FALSE         # 移除边框
)

  • 图形解读:通过该图像我们可以看出每个州的星图被分为4个扇形区域,分别代表:谋杀(Murder),

    袭击(Assault),城市人口(UrbanPop),强奸(Rape)。其中犯罪率最低的是virginia.

6 时间序列可视化

6.1 案例数据解释与展示

library(pageviews)

wp_data <- article_pageviews(project=“en.wikipedia”,

article=“R_(programming_language)”,

start=“2020010100”, end=“2020123100”)

datatable(wp_data)

library(tidyverse)
library(lubridate)
library(readr)
data<-read_csv("C:/Users/86139/Desktop/sz50chengfengu.csv") 
datatable(data)

6.2 图形5——

df <- data %>%
  mutate(
    日期 = as.Date(日期, format = "%Y/%m/%d")  
  ) %>%
  filter(日期 >= as.Date("2019/1/2") & 
           日期 <= as.Date("2019/2/2")) %>%
  select(日期, 名称, 收盘价)
mytheme<-theme(legend.position=c(0.1,0.9),              # 将图例放在图内
legend.background=element_blank())             # 移除图例整体边框
ggplot(df,aes(x=日期,y=收盘价,color=名称))+ # 设置x轴、y轴和线的颜色
geom_line(size=1.0)+
mytheme+ggtitle("合并收盘价折线图")

  • 图形解读:从图表中我们可以看出保利发展(房地产/开发类公司)工商银行(银行/金融类公司)海尔智家(家电/制造类公司)中国建筑(建筑/工程类公司)这四家公司在2019年1月2日到2019年2月2日的变化,其中工商银行,保利发展和中国建筑浮动相对平稳,但都呈上升趋势,而海尔智家浮动较大,经历了波动式上升的过程,表明在那时的市场环境下对海尔智家有利好促进作用,需要进一步观察分析其原因