library(tidyverse)
library(viridis) # 用于扩展调色板
library(DT)
library(gridExtra)
library(RColorBrewer)
library(ggplot2)
library(grDevices)
library(zoo)数据可视化期末报告
1 报告要求
期末实验报告由5章节5个图形组成,每个章节需要作一个图形。
每个章节选择作什么图自主选择,作图前补充完整图形标题名称,例如:图形1——多变量条形图。
案例数据自主收集,不同章节可以公用一个数据集。但同学间不允许使用相同数据集。
每个章节的数据集合需要通过
datatable函数展示,并简要解释数据来源和变量意义。每个输出图形后需要对图形作简要解读,最少需针对图形提出一个观点。
渲染html文件保留代码展示,6月22日前将发布网址提交至共享文档
“8、期末报告”列中。评分标准:
每章节图形各20分
能有效输出图形和合理解释75%
数据独特性强10%
图形个性化强15%
2 类别数据可视化
2.1 案例数据解释与展示
- 该数据源自广东统计年鉴,展示了2023年广东各市的GDP水平。数据比较简单,列名只有市别,经济区域划分,地区生产总值三项。旨在反映广东各市的经济发展差异,以及区域发展差异。
data1<-read.csv("gdp.csv")
DT::datatable(data1)colnames(data1)[1] "市别" "经济区域划分" "各市生产总值"
df_1<-data1|>
arrange(desc(各市生产总值)) |>
mutate(累积百分比 = cumsum(各市生产总值*100/sum(各市生产总值)), #计算累积百分比
累积百分比 = round(累积百分比,1), #保留一位小数
市别 = fct_inorder(市别) #按字符出现顺序定义因子水平
)
df_2<-data1|>
select(经济区域划分,各市生产总值) |>
group_by(经济区域划分) |>
summarise(区域生产总值=sum(各市生产总值)) |>
arrange(desc(区域生产总值)) |>
mutate(累积百分比 = cumsum(区域生产总值*100/sum(区域生产总值)), #计算累积百分比
累积百分比 = round(累积百分比,1), #保留一位小数
经济区域划分 = fct_inorder(经济区域划分) #按字符出现顺序定义因子水平
)
datatable(df_1,rownames = F)datatable(df_2,rownames = F)_
2.2 图形1——广东各市帕累托图&广东区域经济帕累托图
palette1 <- colorRampPalette(brewer.pal(11, "GnBu"))(21)
p<-ggplot(df_1)+aes(x=市别,y=各市生产总值)+
geom_col(width=0.8,fill = palette1,color="grey50")+# 绘制条形图
geom_text(aes(x=市别,y=各市生产总值,label=各市生产总值,vjust=-0.5,angle=22),size=2.5,color="gray50")+ # 添加数值标签,垂直调整标签位置
#ylab("人数\n(人)")+ # 设置y轴标签
theme(axis.text.y=element_text(angle=90,hjust=0.5,vjust=0.5))+ # 调整y轴标签角度
theme(legend.position="none") # 删除图例
# 绘制折线和点
p1<-p+geom_line(aes(x=as.numeric(市别),y=累积百分比*max(各市生产总值/100)))+ # 绘制累积百分比曲线
geom_point(aes(x=as.numeric(市别),y=累积百分比*max(各市生产总值/100)),
size=2,shape=23,fill="yellow")+ # 绘制点
geom_text(aes(label=累积百分比,x=市别,y=1*累积百分比*max(各市生产总值/100),
hjust=0.6,vjust=-0.95),size=3,colour="blue4")+ # 添加百分比数值标签
scale_y_continuous(sec.axis = sec_axis(~./max(df_1$各市生产总值/100)))# 添加坐标轴
p1+annotate("text",x=21,y=25000,label="百分比(%)",angle=90,size=3.5)+
annotate("text",x=19.5,y=32000,label="累积百分比曲线",size=3.5) # 添加注释文本colors <- terrain.colors(6)
p2<-ggplot(df_2)+aes(x=经济区域划分,y=区域生产总值)+
geom_col(width=0.8,fill = colors[c(3,4,5,2)],color="grey50")+# 绘制条形图
geom_text(aes(x=经济区域划分,y=区域生产总值,label=区域生产总值,vjust=-0.5),size=2.5,color="gray50")+ # 添加数值标签,垂直调整标签位置
#ylab("人数\n(人)")+ # 设置y轴标签
theme(axis.text.y=element_text(angle=90,hjust=0.5,vjust=0.5))+ # 调整y轴标签角度
theme(legend.position="none") # 删除图例
# 绘制折线和点
p3<-p2+geom_line(aes(x=as.numeric(经济区域划分),y=累积百分比*max(区域生产总值/100)))+ # 绘制累积百分比曲线
geom_point(aes(x=as.numeric(经济区域划分),y=累积百分比*max(区域生产总值/100)),
size=2,shape=23,fill="yellow")+ # 绘制点
geom_text(aes(label=累积百分比,x=经济区域划分,y=1*累积百分比*max(区域生产总值/100),
hjust=0.6,vjust=-0.95),size=3,colour="blue4")+ # 添加百分比数值标签
scale_y_continuous(sec.axis = sec_axis(~./max(df_2$区域生产总值/100)))# 添加坐标轴
p3+annotate("text",x=4.5,y=80000,label="百分比(%)",angle=90,size=3.5)+
annotate("text",x=4,y=99000,label="累积百分比曲线",size=3.5) # 添加注释文本- 图形解读:图一发现,深圳,广州的生产总值占比已经高达50%,对于拥有21个城市的省份来说,这个经济发展水平是及其失衡的。从区域经济来看,珠三角地区的gdp贡献达到80%以上,而粤东西北的gdp所占毫末。区域发展呈 “断层式” 差异,需通过政策引导、资源均衡配置推动协同发展 。
3 数据分布可视化
3.1 案例数据解释与展示
本数据集源自IMDb(互联网电影数据库),收录了用户评分最高的1000部电影核心信息。涵盖影片名称Series_Title、上映年份Released_Year、分级证书Certificate、时长Runtime、题材Genre、IMDb用户评分(0-10分)IMDB_Rating、Metacritic专业评分Meta_score以及用户投票数No_of_Votes。数据可用于分析顶级影片特征、评分趋势、类型分布及大众与专业评价关联性。
关键点解释:
data2<-read.csv("imdb_top_1000.csv")
colnames(data2)[1] "Series_Title" "Released_Year" "Certificate" "Runtime"
[5] "Genre" "IMDB_Rating" "Meta_score" "No_of_Votes"
DT::datatable(data2)df <- data2 |>
select(IMDB_Rating,Meta_score)|>
mutate(scale_IMDB_Rating = scale(IMDB_Rating),
scale_Meta_score = scale(Meta_score))
df <- na.omit(df)
DT::datatable(df,rownames = FALSE)3.2 图形2——IMDB大众与专家影评分布核密度图
p<-ggplot(df)+aes(x=x)+
geom_density(aes(x=scale_IMDB_Rating,y=..density..),color="grey50",fill="yellow",alpha=0.3)+
geom_label(aes(x=0.5,y=0.25),label="IMDB_Rating",color="red")+ # 添加标签
geom_density(aes(x=scale_Meta_score,y=-..density..),color="grey50",fill="green",alpha=0.3)+
geom_label(aes(x=0,y=-0.3),label="Meta_score",color="red")+ # 添加标签
xlab("指标值")+ggtitle("(b) IMDB_Rating和Meta_score的标准化镜像直方图")
p- 图形解读:IMDB_Rating右偏、Metacritic专业评分Meta_score略微左偏。大众评分存在”高分聚集”现象,用户倾向于给好评。专业评分呈现比较对称分布特征。专业评审倾向严格与大众评分的”宽容分散”形成鲜明对比,揭示了艺术评价中专业性与普适性的根本差异。这种差异使Meta_score更适用于质量基准评估,而IMDB_Rating更适合衡量大众接受度。
4 变量关系可视化
4.1 案例数据解释与展示
- 本数据集包含学生核心信息:年龄(数值型,反映成长阶段)、性别(分类变量,区分生理特征)、每周学习时长(数值型,单位小时,衡量投入程度)及考试成绩(数值型,百分制,核心学业指标)。数据用于学习时长对成绩的影响,和群体差异研究,如不同性别/年龄的学习效率。
data3<-read.csv("basic-student-score.csv")
colnames(data3)[1] "age" "gender" "study_hours" "exam_score"
DT::datatable(data3)df1<-data3|>
select(study_hours,exam_score)
df2<-data3|>
select(age,exam_score)4.2 图形3——学习时长与成绩的散点图&学习时长-性别-成绩气泡图
p1<-ggplot(data=df1,aes(x=study_hours,y=exam_score))+
geom_point(shape=21,size=1.5,fill="deepskyblue")+ # 设置点的形状、大小和填充颜色
geom_rug(color="steelblue")+ # 添加地毯图
stat_smooth(method=lm,color="red",fill="purple",size=0.8)+ # 添加线性拟合线、设置线的颜色和置信带的颜色
geom_point(aes(x=mean(study_hours),y=mean(exam_score)),shape=21,fill="yellow",size=4)+ # 绘制均值点
ggtitle("(a) 学习时长&考试成绩")
p3<-ggplot(data3,aes(x=study_hours,y=exam_score,color=gender))+
geom_point(aes(size=exam_score),alpha=0.5)+
scale_size(range=c(1,7))+ # 设置点的大小
theme(panel.grid.minor=element_blank())+ # 移除次网格线
theme(plot.title=element_text(size=12))+ # 设置标题字体大小
theme(legend.text=element_text(size=9,color="black"))+ # 设置图例字体大小和颜色
guides(size="none")+
annotate("text",x=4,y=30,label="气泡大小:学习成绩",size=3.5)+# 添加注释文本
ggtitle("(b) 学习时长&考试成绩&性别")
grid.arrange(p1,p3,ncol=2) # 按2列组合图形p1和p2- 图形解读:图(a)显示学习时长与考试成绩呈显著正相关,趋势线表明每增加1小时学习,成绩约提升3.3分。图(b)揭示性别差异:女性学习时长较长,且高分群体中女性占比更高,反映女性更善于通过增加学习投入获取学业优势。
5 样本相似性可视化
5.1 案例数据解释与展示
- 本数据集涵盖中国省级行政单位2023年度核心财政收入指标,包含增值税、企业所得税、个人所得税、房产税、契税、行政事业性收费、地方专项收入及非税收入八大核心科目。数据反映各省经济活跃度与财政结构特征:增值税和企业所得税体现工商业规模,个人所得税反映居民收入水平,房产税与契税映射房地产市场热度,行政收费和非税收入显示地方财政多元化程度。通过横向对比可识别区域经济差异——东部沿海省份以增值税/所得税为主力税源,中西部更依赖转移支付和非税收入;纵向分析则揭示各省对土地财政(契税)的依存度变化。该数据是研究地方财力、税源结构及区域经济平衡的关键素材。
data4<-read.csv("财政收入.csv")
colnames(data4)[1] "地区" "增值税" "企业所得税"
[4] "个人所得税" "房产税" "行政事业性收费收入"
[7] "地方专项收入" "非税收入" "契税"
DT::datatable(data4)df <- data4 |> gather(增值税:契税,key=项目,value=金额) |>
mutate(项目=fct_inorder(项目))
datatable(df,rownames = FALSE)5.2 图形4——地区财政收入星象图
mat<-data4%>%select(-c(地区))%>%as.matrix() # 转换成矩阵
rownames(mat)=data4[,1] # 设置矩阵行名称
stars(mat,
full=TRUE, # 绘制出满圆
scale=TRUE, # 将数据缩放到[0,1]的范围
nrow=5, # 5行布局
len=1, # 设置半径或线段长度的比例
frame.plot=TRUE, # 添加边框
draw.segments=TRUE,key.loc=c(14,2,5),, # 绘制圆弧图,并设置位置
mar=c(0.5,0.1,0.1,0.1), # 设置图形边界
cex=0.6) # 设置标签字体大小- 图形解读:该图清晰揭示了2023年中国省级财政的结构性差异:东部沿海地区,如广东、江苏、上海、浙江是财政收入体量较大的地区。在增值税和企业所得税上形成显著高峰,反映其强大的工商业基础;中西部省份则呈现”非税收入主导”特征,如四川、河南的行政事业性收费占比超25%。值得注意的是,房产税与契税呈现”区域分化”——浙江、江苏等地的契税收入仍保持高位,而东北地区房产税成主要支撑。这种可视化有效呈现了经济转型期地方财源的脆弱性与区域不平衡。
6 时间序列可视化
6.1 案例数据解释与展示
- 特斯拉2010年6月IPO(发行价$17),首年股价剧烈波动($14.98-$35.47),年末收于$23.89(年涨40.7%)。数据包含每日开盘/最高/最低/收盘价及成交量,反映新兴电动车企初期的市场分歧与高波动特性。
data5<-read.csv("Tesla_stock_data.csv")
colnames(data5)[1] "date" "close" "high" "low" "open" "volume"
DT::datatable(data5)data5$date<- as.Date(data5$date)
df <- data5 |> select(date:volume) |>
mutate(ma5 = rollmean(close, k = 5, fill = NA, align = "right"),
ma10 = rollmean(close, k = 10, fill = NA, align = "right"),
ma20 = rollmean(close, k = 20, fill = NA, align = "right"),
date_index = seq_along(date)
)
df<- df[df$date >= "2019-01-01", ]
datatable(df)6.2 图形5——特斯拉K线图
p1 <- df |> ggplot(aes(x = date)) +
# K线主体(竖线代表最高价-最低价)
geom_segment(aes(x = date, xend = date, y = low, yend = high), color = "gray50") +
# K线实体(矩形代表开盘-收盘价)
geom_rect(aes(
xmin = date - 0.4, xmax = date + 0.4,
ymin = pmin(open, close), ymax = pmax(open, close),
fill = close > open
)) +
# 移动平均线
geom_line(aes(y = ma5, color = "5日"), size = 0.8) +
geom_line(aes(y = ma10, color = "10日"), size = 0.8) +
geom_line(aes(y = ma20, color = "20日"), size = 0.8) +
# 颜色设置
scale_fill_manual(values = c("TRUE" = "#FF4500", "FALSE" = "#32CD32")) + # 红涨绿跌
scale_color_manual(values = c("5日" = "blue", "10日" = "orange", "20日" = "purple")) +
# 日期轴设置(关键:使用scale_x_date自动处理日期)
scale_x_date(
breaks = "3 months", # 每3个月一个刻度
labels = scales::date_format("%Y-%m"), # 显示年月
expand = c(0, 0) # 取消x轴两端留白
) +
# 坐标系与主题
scale_y_continuous(expand = c(0, 0)) +
theme_minimal(base_size = 12) +
theme(
# 移除不必要的边框
panel.grid.minor = element_blank(),
panel.border = element_blank(),
axis.line.x = element_line(color = "gray70"),
# 调整图例
legend.position = "top",
legend.title = element_blank(),
legend.margin = margin(0, 0, 0, 0),
legend.box.margin = margin(-5, 0, 5, 0),
# 调整x轴标签
axis.text.x = element_text(
angle = 45, hjust = 1, size = 10, margin = margin(t = 5)
),
# 调整绘图边距
plot.margin = margin(10, 10, 15, 10)
) +
# 标签设置
labs(
title = "特斯拉2019年至今股价走势图",
y = "股价(美元)",
fill = "涨跌",
color = "移动平均线"
)
# 显示图表
p1- 图形解读:
从特斯拉 K 线图来看,其走势波动剧烈。长期呈现上涨趋势,中间夹杂多次大幅涨跌。如 2020 年周 K 线显示,年初从 64 美元暴跌至 3 月的 23 美元,随后又暴涨到 12 月的 167 美元2。2024 - 2025 年期间波动也较大,2024 年 12 月曾创历史新高,之后股价大幅下跌,2025 年 2 月单月跌幅近 3 成3。近期短期均线附近波动明显,MACD 指标显示有空头市场迹象,但 DIF 线有上穿 DEA 线趋势,预示可能有反弹4