library(DT)
# 1. 读取数据
data <- read.csv("cities_data.csv", header = TRUE, fileEncoding = "UTF-8")
datatable(data)数据可视化期末报告
1 报告要求
期末实验报告由5章节5个图形组成,每个章节需要作一个图形。
每个章节选择作什么图自主选择,作图前补充完整图形标题名称,例如:图形1——多变量条形图。
案例数据自主收集,不同章节可以公用一个数据集。但同学间不允许使用相同数据集。
每个章节的数据集合需要通过
datatable函数展示,并简要解释数据来源和变量意义。每个输出图形后需要对图形作简要解读,最少需针对图形提出一个观点。
渲染html文件保留代码展示,6月22日前将发布网址提交至共享文档
“8、期末报告”列中。评分标准:
每章节图形各20分
能有效输出图形和合理解释75%
数据独特性强10%
图形个性化强15%
2 类别数据可视化
2.1 案例数据解释与展示
- 本章使用2023年中国主要城市人口密度,GDP等数据,分析部分与整体关系。
2.2 图形1——矩形树状图
library(treemap)
data$土地面积分组 <- cut(data$土地面积.平方公里., breaks = 3, labels = c("小", "中", "大"))
p1<-treemap(data,
index = c("土地面积分组", "城市"),
vSize = "GDP.亿元.",
vColor = "人口密度.人.平方公里.",
type = "value",
title = "按土地面积分组的城市GDP",
fontsize.labels = c(12, 8), # 两级标签大小(分组标签较大,城市标签较小)
align.labels = list(
c("center", "top"), # 第一级标签(土地面积分组)居中靠上
c("left", "bottom") # 第二级标签(城市)靠左靠下
),
palette = "RdYlBu",
bg.labels = "transparent"
)p2<-treemap(data,
index = "城市", # 分组变量(必须是分类变量)
vSize = "GDP.亿元.",
vColor = "人口密度.人.平方公里.",
type = "value",
title = "城市GDP与人口密度",
palette = "RdYlBu"
)- 图形解读: 按土地面积分组的城市GDP图形中:分析土地面积对GDP和人口分布的影响,揭示土地资源与经济发展的深层次关系。
- 土地面积分组影响 嵌套结构:城市按土地面积分为“小/中/大”三组: 小面积组(如深圳、厦门):GDP高但土地受限,人口密度极高。 大面积组(如北京、成都):GDP高且土地资源充裕,人口密度相对较低。
- 异常值发现 深圳:在“小面积组”中GDP最高,但人口密度远超同组其他城市。 杭州:在“大面积组”中人口密度最低,可能与城市规划或地理限制有关。
城市GDP与人口密度图形中:分析城市GDP与人口密度的直接关联,快速识别经济强市和高密度城市。
- GDP规模对比 矩形面积直接反映各城市GDP总量: 深圳、上海、北京等一线城市的矩形最大(GDP最高)。 厦门、无锡等城市的矩形较小(GDP相对较低)。
2. 人口密度分布 颜色深浅表示人口密度: 红色/黄色(高密度):深圳(8908人/平方公里)、东莞(4262人/平方公里)。 蓝色(低密度):杭州(743人/平方公里)、长沙(890人/平方公里)。
3. 直观结论 高GDP高密度:深圳、上海、广州等城市同时具备高GDP和高人口密度。 低GDP低密度:合肥、济南等城市GDP和人口密度均较低。 ####
3 数据分布可视化
3.1 案例数据解释与展示
- 本章使用2023年中国主要城市人口密度,GDP等数据,
library(ggplot2)
data <- read.csv("cities_data.csv", fileEncoding = "UTF-8")
datatable(data)3.2 图形2——小提琴图
library(ggplot2)
library(dplyr)
library(tidyr)
# 选择需要标准化的数值列
numeric_cols <- c("人口密度.人.平方公里.", "GDP.亿元.", "土地面积.平方公里.")
# 标准化并保留分组列
data_std <- data %>%
mutate(across(all_of(numeric_cols), ~ as.numeric(scale(.))))
# 按土地面积分组
data_std$土地面积分组 <- cut(data_std$土地面积.平方公里.,
breaks = quantile(data_std$土地面积.平方公里., probs = c(0, 0.33, 0.66, 1)),
labels = c("小", "中", "大"))
data_std_long <- data_std %>%
pivot_longer(
cols = c("人口密度.人.平方公里.", "GDP.亿元."),
names_to = "指标",
values_to = "标准化值"
)
# 分面绘制
ggplot(data_std_long, aes(x = 土地面积分组, y = 标准化值, fill = 指标)) +
geom_violin(alpha = 0.6, position = position_dodge(0.8)) +
geom_boxplot(width = 0.1, position = position_dodge(0.8), fill = "white") +
facet_wrap(~指标, nrow = 2) +
scale_fill_manual(values = c("#66C2A5", "#FC8D62")) +
labs(
title = "标准化后的指标分布对比",
y = "标准化值",
fill = "指标"
) +
theme_bw()- 图形解读:
- 土地面积与人口密度的关系
分布特征
小面积城市组:
人口密度分布呈现 显著右偏(右侧长尾),标准化值普遍>0(高于全国均值)。
如深圳(标准化值≈2.5)、东莞等城市密度极端高,反映土地资源紧张倒逼高密度发展。
大面积城市组:
密度分布集中在 -1到0.5 之间(接近或略低于均值),如北京、成都。
分布更对称,说明土地充裕时密度可控。
2.土地面积与GDP的关系
分布差异
中等面积城市组:
GDP分布 最分散(从-1到2.5),既有上海、苏州等高值,也有无锡、佛山等中值。
反映经济结构多元化(工业、服务业均衡)。
大面积城市组:
- 存在 低GDP拖尾(如长沙、合肥标准化值<0),但北京例外(高GDP+大面积)。
小面积城市组:
- GDP分布集中(0.5~2.5),依赖高附加值产业(如深圳的科技、金融)。
3.人口密度 vs. GDP:北京:高GDP但密度适中(标准化值≈0.5),说明规模效应+规划合理。 长沙:低GDP+低密度(双负),提示增长潜力未被释放。
4 变量关系可视化
4.1 案例数据解释与展示
- 本章使用波士顿房价数据集创建六边形分箱图,展示不同变量之间的关系和密度分布。
- CRIM: 城镇人均犯罪率 ZN: 住宅用地比例 INDUS: 非零售商业用地比例 CHAS: 是否临河(1=是,0=否) NOX: 氮氧化物浓度 RM: 住宅平均房间数 AGE: 1940年前建成的自住单位比例 DIS: 到波士顿五个就业中心的加权距离 RAD: 径向高速公路可达性指数 TAX: 每10,000美元的全额财产税税率 PTRATIO: 城镇师生比 B: 黑人比例 LSTAT: 低收入阶层比例 MEDV: 自住房屋的中位数价值(单位:千美元)
library(hexbin)
library(ggplot2)
library(DT)
house_data <- read.csv("house_data.csv")
datatable(house_data)4.2 图形3——六变形分箱散点图
# 1. 房间数(RM)与房价中位数(MEDV)的关系
p1<-ggplot(house_data, aes(x = RM, y = MEDV)) +
geom_hex(bins = 30) +
scale_fill_gradient(low = "lightblue", high = "darkblue") +
labs(title = "房间数与房价中位数的关系(六边形分箱图)",
x = "每户平均房间数",
y = "房价中位数(千美元)",
fill = "数据点密度") +
theme_minimal()
print(p1)# 2. 低收入人口比例(LSTAT)与房价中位数(MEDV)的关系
p2<-ggplot(house_data, aes(x = LSTAT, y = MEDV)) +
geom_hex(bins = 30) +
scale_fill_gradient(low = "lightblue", high = "darkblue") +
labs(title = "低收入人口比例与房价中位数的关系",
x = "低收入人口比例(%)",
y = "房价中位数(千美元)",
fill = "数据点密度") +
theme_minimal()
print(p2)图形解读:
1. 房间数(RM) vs. 房价中位数(MEDV)
观察到的关系:
明显的正相关:六边形颜色从浅蓝(低密度)向深蓝(高密度)过渡的区域显示,随着房间数(RM)的增加,房价中位数(MEDV)总体呈上升趋势。
关键分布特征:
高密度区域:集中在 RM = 5.5–7.0 和 MEDV = 20–30(千美元),这是最常见的房屋类型。
异常点:当房间数超过7时,房价显著升高(部分住宅可能属于高端房产)。
非线性关系:房价增长在RM > 6.5后加速,可能反映高端房产的溢价效应。
实际意义:
- 房间数是房价的重要正向预测指标,但需注意:房间数过少(RM < 5)的房屋价格较低,可能对应老旧或小户型住宅。房间数过多(RM > 8)的数据点稀疏,可能代表异常值或豪宅(需进一步验证)。
2. 低收入人口比例(LSTAT) vs. 房价中位数(MEDV)
观察到的关系:
强烈的负相关:六边形颜色从浅绿(低密度)向深绿(高密度)显示,随着低收入人口比例(LSTAT)增加,房价中位数(MEDV)显著下降。
关键分布特征:
高密度区域:集中在 LSTAT = 5–15% 和 MEDV = 20–30(千美元),代表中产阶级社区。
极端情况:
当LSTAT > 30%时,房价普遍低于20(千美元),可能对应贫困区域。
当LSTAT < 5%时,房价较高(MEDV > 30),但数据点较少(可能是富裕社区)。
实际意义:
低收入人口比例是房价的强负向预测指标,反映社会经济地位对房价的影响:
- 高LSTAT区域(低收入集中)的房价低迷,可能与教育资源、治安等因素相关。
5 样本相似性可视化
5.1 案例数据解释与展示
- 随机生成基因表达矩阵,行=基因,列=样本,值=标准化表达量,发现共表达基因簇或样本分组。
library(gplots)
# 设置随机种子保证结果可重复
set.seed(123)
# 生成随机基因表达矩阵
n_genes <- 50 # 基因数量
n_samples <- 10 # 样本数量
expr_matrix <- matrix(rnorm(n_genes * n_samples, mean = 10, sd = 3),
nrow = n_genes,
ncol = n_samples)
# 添加行名和列名
rownames(expr_matrix) <- paste0("Gene_", 1:n_genes)
colnames(expr_matrix) <- paste0("Sample_", LETTERS[1:n_samples])
datatable(expr_matrix)5.2 图形4——热力图
heatmap.2(expr_matrix,
trace = "none", # 不显示trace线
col = colorRampPalette(c("blue", "white", "red"))(100),
scale = "none",
distfun = function(x) dist(x, method = "euclidean"),
hclustfun = function(x) hclust(x, method = "complete"),
margins = c(5.3,3), # 调整边距以适应标签
cexRow = 0.5, # 行标签大小
cexCol = 0.9, # 列标签大小
main = "基因表达热力图",
dendrogram = "both", # 显示行和列的树状图
key = TRUE, # 显示颜色键
keysize = 2, # 颜色键大小
density.info = "none") # 不显示密度图图形解读:1. 热图结构
颜色键(Color Key):显示数值范围从5到15,蓝色表示低表达值,红色表示高表达值,白色表示中间值
列(样本):显示9个样本(Sample_A到Sample_I,按聚类结果重新排序)
行(基因):显示13个基因(Gene_6到Gene_46,按聚类结果重新排序)
2. 聚类分析
样本聚类(列)
样本明显分为两个主要簇:
右侧簇:包含Sample_H, Sample_I, Sample_A, Sample_F
左侧簇:包含Sample_C, Sample_G, Sample_B, Sample_E, Sample_D
Sample_H和Sample_I关系最近,与其他样本差异较大
基因聚类(行)
基因也分为两个主要表达模式:
上部基因(如Gene_19, Gene_42):在右侧样本簇(Sample_H, I, A, F)中表达较高(红色)
下部基因(如Gene_6, Gene_34):在左侧样本簇(Sample_C, G, B, E, D)中表达较高
3. 表达模式观察
差异表达基因:
Gene_19和Gene_42在Sample_H和Sample_I中表达显著高于其他样本
Gene_6和Gene_34在左侧样本簇中表达较高
样本特异性:
Sample_H和Sample_I显示出独特的基因表达谱,与其他样本明显不同
Sample_C和Sample_G表达模式相似
4. 潜在生物学意义
标记基因:
Gene_19和Gene_42可能是右侧样本簇(特别是Sample_H和I)的特征基因
Gene_6和Gene_34可能是左侧样本簇的特征基因
异常样本:Sample_A和Sample_F虽然聚类在右侧,但表达模式介于两组之间,可能需要进一步检查
6 时间序列可视化
6.1 案例数据解释与展示
- 气候变化数据,时间=月份,类别=地区(北半球/南半球/赤道),值=温度异常值,对比不同区域气候变暖趋势
library(ggplot2)
library(ggstream)
climate_data <- data.frame(
month = rep(1:12, each = 3),
region = rep(c("North", "Equator", "South"), 12),
anomaly = c(rnorm(12, 1.2, 0.3), rnorm(12, 0.8, 0.2), rnorm(12, 0.5, 0.1))
)
datatable(climate_data)6.2 图形5——流线图
library(ggplot2)
library(dplyr)
climate_data$month <- as.numeric(climate_data$month)
# 使流线对称
climate_centered <- climate_data %>%
group_by(month) %>%
mutate(anomaly_centered = anomaly - mean(anomaly))
ggplot(climate_centered, aes(x = month, y = anomaly_centered, fill = region)) +
geom_area(position = "identity", alpha = 0.8) +
scale_x_continuous(breaks = 1:12, labels = month.abb) +
labs(title = "温度异常流线图",
x = "Month", y = "Centered Anomaly", fill = "Region") +
theme_minimal()- 图形解读:
Y 轴(Centered Anomaly)
数值经过中心化处理(减去各月份均值),因此:
正值:该区域温度异常高于当月全球平均。
负值:该区域温度异常低于当月全球平均。
例如:北半球(红色)在大部分月份高于均值,南半球(蓝色)普遍低于均值。
X 轴(Month)
显示1-12月(Jan-Dec),流线趋势反映季节性变化:
北半球夏季(Jun-Aug)异常值较高(红色区域更宽)。
南半球夏季(Dec-Feb)异常值略升(蓝色区域变宽)。
区域颜色
North(红色):北半球温度异常最显著,波动较大。
Equator(青色):赤道地区异常值居中,变化平缓。
South(蓝色):南半球异常值最低,波动较小。
对称性
- 流线围绕
y=0对称,说明中心化处理成功,各区域异常值相互抵消。
- 流线围绕
关键结论
北半球主导变暖:红色区域面积更大,表明北半球对全球温度异常贡献最大。
季节性差异:北半球冬季(Dec-Feb)异常值略有下降,但仍高于南半球同期。
赤道稳定性:青色区域波动最小,说明赤道地区温度异常较稳定。