数据可视化期末报告

Author

221527213余语彤

1 报告要求

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

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

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

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

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

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

  • 评分标准:

    • 每章节图形各20分

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

    • 数据独特性强10%

    • 图形个性化强15%

2 类别数据可视化

2.1 案例数据解释与展示

  • UCBAdmissions 是 R 内置数据集(来自 datasets 包),记录了 1973 年加州大学伯克利分校(UCB)研究生院申请结果,是一个多维列联表(table 类)。它包含 3 个分类变量 和 1 个数值变量(频数)

  • Admit是分类变量,包含”Admitted”, “Rejected”,申请结果录取或拒绝。 Gender是分类变量,包含”Male”, “Female”,申请人性别。 Dept是分类变量包含”A”, “B”, “C”, “D”, “E”, “F”,申请的院系(A-F共6个)。 Freq 数值变量,是指对应组合的申请人数(频数)。

data = as.data.frame(UCBAdmissions)
DT::datatable(data,rownames = FALSE)

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

df <- data %>%
  group_by(Admit, Dept) %>%
  summarise(n = sum(Freq)) %>%
  pivot_wider(names_from = Admit, values_from = n) %>%
  rename(院系=Dept,录取 = Admitted, 拒绝 = Rejected)%>%
  mutate(院系=fct_inorder(院系))

df_long <- df %>%
  pivot_longer(
    cols = c("录取", "拒绝"),
    names_to = "申请结果",
    values_to = "人数"
  )

myangle<-seq(-20,-340,length.out=8)       # 设置标签角度,使之垂直于坐标轴

# 图形1 各院系录取情况玫瑰图
p1<-ggRose(df_long,aes(x=院系,y=人数,fill=申请结果),
  stat="identity",palette="Reds",reverse=TRUE)+ylab("人数")+
  guides(fill=guide_legend(nrow=2,title=NULL))+  # 图例排成2行,去掉图例标题
  theme(legend.position="bottom")+
  theme(plot.title=element_text(size=10))+       # 设置标题字体大小
  theme(axis.text.x=element_text(size=8,color="red3",angle=myangle))+ # 设置坐标轴标签字体大小和角度
  ggtitle("图形1 各院系录取情况玫瑰图")
p1

  • 图形解读:这段代码创建了一个玫瑰图(极坐标条形图),展示了UC Berkeley各院系的录取和拒绝情况。图形特点包括: 1. 使用玫瑰图形式,每个”花瓣”代表一个院系 2. 录取和拒绝人数用不同颜色区分(红色系) 3. 院系标签以特定角度排列,便于阅读 4. 图例置于底部并排成两行 5. 标题和坐标轴标签进行了样式优化。

    直观看出各院系的录取与拒绝的人数对比。

  • 代码编写技巧与心得体会:

    数据处理流程:使用dplyrtidyr进行数据整理,流程清晰。先汇总再转换数据格式,最后调整为长格式适合ggplot2绘图

    可视化技巧:使用自定义的ggRose函数简化绘图。精心调整标签角度(myangle序列)解决标签重叠问题。使用红色系调色板("Reds")与主题契合。

3 数据分布可视化

3.1 案例数据解释与展示

  • 数据来源于中国经济社会大数据研究平台中中国城市统计数据库。

    数据为2006年-2022年广东省城市液化石油气储气能力(chuqi)和城市液化石油气供气总量(gongqi)。单位均为吨。

data0=read.csv("2006-2022城市液化石油气储气供气.csv",header =TRUE,encoding = "UTF-8",stringsAsFactors = FALSE)
data = as.data.frame(data0)
datatable(data,rownames = FALSE)

3.2 图形2——镜像核密度图

df <- data |>
  mutate(
    std.储气能力=scale(chuqi),
    std.供气总量=scale(gongqi)
  )

p1<-ggplot(df)+
   geom_density(aes(x=chuqi,y=..density..),bins=30,color="grey50",fill="red",alpha=0.3)+ # 绘制eruptions的直方图(上图)
   geom_label(aes(x=300000,y=0.2),label="城市液化石油气储气能力",color="red")+  # 添加标签
   geom_density(aes(x=gongqi,y=-..density..),bins=30,color="grey50",fill="blue",alpha=0.3)+ # 绘制waiting的直方图(下图)
   geom_label(aes(x=300000,y=-0.1),label="城市液化石油气供气总量",color="blue")+  # 添加标签
   xlab("指标值")+ggtitle("(a) 原始数据镜像核密度")

p2<-ggplot(df)+
   geom_density(aes(x=std.储气能力,y=..density..),bins=30,color="grey50",fill="red",alpha=0.3)+ # 绘制eruptions的直方图(上图)
   geom_label(aes(x=-0.5,y=0.3),label="城市液化石油气储气能力",color="red")+  # 添加标签
   geom_density(aes(x=std.供气总量,y=-..density..),bins=30,color="grey50",fill="blue",alpha=0.3)+ # 绘制waiting的直方图(下图)
   geom_label(aes(x=-0.5,y=-0.3),label="城市液化石油气供气总量",color="blue")+  # 添加标签
   xlab("指标值")+ggtitle("(b) 标准化数据镜像核密度")

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

  • 图形解读:两个镜像核密度图,用于比较2006-2022年广东省液化石油气的储气能力和供气总量:原始数据镜像核密度图(p1):上方红色区域:储气能力(chuqi)的分布,下方蓝色区域:供气总量(gongqi)的分布,采用镜像对称设计,便于比较两个变量的分布形态。标准化数据镜像核密度图(p2):数据经过标准化处理(scale),同样采用镜像对称设计,便于比较两个变量在相同尺度下的分布差异。p1因为数据明显偏大,不能直观判断两个变量的关系,因而对数据进行标准化。可以观察出广东省城市液化石油气储气能力和城市液化石油气供气总量的分布形状基本相同,但也可以看出广东省的供气量和储气能力有不平衡的关系。

  • 代码编写技巧与心得体会:使用scale()函数对数据进行标准化,消除量纲影响,保留原始数据的同时创建标准化版本,便于对比分析。镜像密度图设计:利用y=-..density..创造镜像效果,直观对比两个变量。颜色区分:红色代表储气能力,蓝色代表供气总量,形成鲜明对比,透明填充(alpha=0.3)增强重叠区域的可视性

4 变量关系可视化

4.1 案例数据解释与展示

  • 数据来源于中国经济社会大数据研究平台中农产品成本收益专题数据库的2000-2020年三大粮食产值。包含变量有三种粮食平均每亩产值、稻谷每亩产值、小麦每亩产值、玉米每亩产值。单位均为元。
data0=read.csv("2000-2020年三大粮食产值.csv",header =TRUE,encoding = "UTF-8",stringsAsFactors = FALSE)
data = as.data.frame(data0)
datatable(data,rownames = FALSE)

4.2 图形3——散点图矩阵

library(GGally)

df <- data |> dplyr::select(-c("年度"))

# 自定义绘图函数
my_fn <- function(data, mapping, ...){
  ggplot(data = data, mapping = mapping) + 
    geom_point(color = "#0072B2", alpha = 0.5) + 
    geom_smooth(method = "lm", color = "#D55E00", se = FALSE)
}

# 改进的散点图矩阵
ggpairs(df,
        lower = list(continuous = my_fn),
        upper = list(continuous = wrap("cor", size = 4)),
        diag = list(continuous = wrap("densityDiag", fill = "#56B4E9"))) +
  labs(title = "三大粮食产值关系矩阵") +
  theme_bw() +
  theme(panel.grid.minor = element_blank())

  • 图形解读:这个增强版散点图矩阵通过多维度可视化展示了三大粮食产值(稻谷、小麦、玉米)及其平均值之间的复杂关系:
  • 下三角区域:蓝色散点:展示变量间的原始数据分布(#0072B2颜色)。橙色趋势线:添加线性回归线(#D55E00颜色),帮助直观判断变量间的线性关系方向和强度。半透明处理(alpha=0.5):减轻重叠点的影响,提高图形可读性
  • 上三角区域:相关系数:直接显示Pearson相关系数值。大字号(size=4):确保相关系数清晰可读。无冗余图形:简洁呈现最关键的相关性指标
  • 对角线区域:天蓝色密度曲线(#56B4E9填充):展示各变量的单变量分布特征。直观反映各粮食产值的集中趋势和离散程度
  • 总体来说,稻谷、小麦和玉米之间的产值有很强的相关性。

5 样本相似性可视化

5.1 案例数据解释与展示

  • 数据来源于中国经济社会大数据研究平台中中国城市统计数据库的2003-2014年单位从业人员数。包含变量有地区、教育业、批发零售业、交通运输仓储邮政业、金融业、文化体育娱乐业,单位均为万人。
data0=read.csv("各行业单位就业人数.csv",header =TRUE,encoding = "UTF-8",stringsAsFactors = FALSE)
data = as.data.frame(data0)
datatable(data,rownames = FALSE)

5.2 图形4——雷达图

mytheme<-theme(legend.position="right",    # 设置标题位置
   axis.text.x=element_text(size=9,color="blue4"))
                                  # 设置坐标轴标签字体大小、颜色和和角度


ggRadar(data,aes(group=地区),    # 按品种分组
  rescale=FALSE,                         # 数据标准化(缩放到[0,1]范围)
  ylim=c(0,6),                       # 设置y轴范围
  alpha=0.3,                            # 设置颜色透明度
  size=2)+                              # 设置点的大小
  scale_fill_viridis_d(option = "D") +  # viridis离散配色
  scale_color_viridis_d(option = "D") +
  mytheme+xlab("行业")+ylab("就业人数(万人)")+
  ggtitle("雷达图") # 添加标题

  • 图形解读:这段代码创建了一个雷达图,用于比较不同地区(北京、天津、上海、重庆)在五个行业(教育业、批发零售业等)的单位就业人数分布。多维度比较:雷达图的每个轴代表一个行业,可以直观比较各地区在不同行业的就业情况。地区对比:不同颜色代表不同地区,便于横向比较。视觉设计:设置了透明度(alpha=0.3)避免区域完全遮挡,调整了坐标轴标签样式。

  • 代码优点:使用ggRadar包快速创建雷达图,通过rescale=FALSE保留原始数据尺度,自定义主题(mytheme)统一图形风格,清晰的标题和坐标轴标签,使用viridis离散配色,使图形更加美观。

6 时间序列可视化

6.1 案例数据解释与展示

  • 数据来源于中国经济社会大数据研究平台中金融专题数据库的1999-2019年上海和深圳证券交易所A股和B股成交额。成交额单位为亿元。
data<-read_csv("成交额.csv") 
data$时间 <- as.numeric(data$时间)  # 转为数值型年份
datatable(data,rownames = F)

6.2 图形5——地平线图

library(ggHoriPlot)
library(ggthemes)


# 创建地平线图
ggplot(data, aes(x = 时间, y = 成交额)) +
  geom_horizon(
    origin = "mean",      # 以均值为基准线
    horizonscale = 10,     # 将数据分成10个区间
    show.legend = TRUE
  ) +
  scale_x_continuous(
    breaks = seq(1995, 2020, by = 1),  # 每1年一个刻度
    expand = c(0, 0)                   # 不留空白
  ) +
  facet_grid(类别 ~ ., scales = "free_y") +  # 按类别分面,y轴自由缩放
  scale_fill_hcl(
    palette = "RdYlBu",   # 红-黄-蓝渐变色
    reverse = FALSE       # 不反转颜色
  ) +
  labs(
    title = "1999-2019年证券交易所成交额地平线图",
    x = "年份",
    y = "成交额(亿元)"
  ) +
  theme_few() +          # 简洁主题
  theme(
    axis.text.x = element_text(angle = 45, hjust = 1),  # x轴标签倾斜45度
    strip.text.y = element_text(angle = 0)              # 分面标签水平显示
  )

  • 图形解读:这段代码创建了一个地平线图(Horizon Plot),展示了1999-2019年上海和深圳证券交易所A股、B股的成交额变化。多维度展示:通过分面(facet)同时显示4个类别的数据(上交所A/B股、深交所A/B股)地平线图特性:以均值为基准线(origin=“mean”),将数据分成10个色带区间(horizonscale=10),使用RdYlBu色板(红-黄-蓝)表示数据相对于均值的偏离程度。x轴显示完整年份序列,便于观察长期趋势。

  • 沪市与深市异常通常同步但幅度不同,B股异常往往滞后于A股。

  • 1999-2019年中国证券市场成交额异常波动呈现出明显的阶段性特征,各市场板块的异常波动与重大政策调整和市场结构性变化密切相关。

    上海证券交易所A股在2007年出现深红色带上沿异常,成交额达到301,960亿元的历史峰值,反映出牛市狂热期的资金非理性涌入;随后2008年立即转为深蓝色带下沿异常,成交额萎缩至179,762亿元,较前一年下降40%,这与全球金融危机的爆发直接相关,显示出市场恐慌性流动性枯竭的特征。2015年该市场再次出现极端深红色带上沿异常,成交额创下1,323,231亿元的历史极值。

    上海证券交易所B股市场在2001年表现出显著红色带上沿异常,成交额从139亿元急剧攀升至2,832亿元,这直接源于当年B股市场对境内居民开放的政策刺激;2007年该市场红色带异常再次出现,成交额达到3,473亿元,较常年水平放大10倍,与A股牛市行情形成明显的跨市场传染效应。

  • 使用ggHoriPlot包实现专业地平线图,合理的分面布局(scales=“free_y”)适应不同量级的数据,调整的坐标轴标签(45度倾斜)提升可读性。