library(dplyr) # 确保 dplyr 已加载
library(ggplot2) # 必须加载才能使用 ggplot()
library(gridExtra)
library(tidyr)
library(ggradar)
library(stringr) # 加载包
library(forcats)
library(readxl)
library(DT)数据可视化期末报告
1 报告要求
期末实验报告由5章节5个图形组成,每个章节需要作一个图形。
每个章节选择作什么图自主选择,作图前补充完整图形标题名称,例如:图形1——多变量条形图。
案例数据自主收集,不同章节可以公用一个数据集。但同学间不允许使用相同数据集。
每个章节的数据集合需要通过
datatable函数展示,并简要解释数据来源和变量意义。每个输出图形后需要对图形作简要解读,最少需针对图形提出一个观点。
渲染html文件保留代码展示,6月22日前将发布网址提交至共享文档
“8、期末报告”列中。评分标准:
每章节图形各20分
能有效输出图形和合理解释75%
数据独特性强10%
图形个性化强15%
2 类别数据可视化
2.1 案例数据解释与展示
- 以下数据为对养生食品购买需求的相关数据
#数据
data = read_xlsx("E:\\数据可视化\\期末报告\\期末数据\\养生食品 第一个图数据.xlsx")
DT::datatable(data,rownames = FALSE)df1<-data |>
select(性别,购买养生食品的频率) |>
summarise(人数=n(),.by=c(性别,购买养生食品的频率)) # 生成列联表并转化成数据框
df2<-data |>
select(月收入,购买养生食品的频率) |>
summarise(人数=n(),.by=c(月收入,购买养生食品的频率))
datatable(df1,rownames = FALSE);datatable(df2,rownames = FALSE)2.2 图形1——多变量条形图
# 图(a)垂直并列条形图
p1<-ggplot(df1,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(df1$人数))+ # 设置y轴范围
ggtitle("(a) 垂直并列条形图")
# 图(b) 水平并列条形图
p2<-ggplot(df1,aes(x=购买养生食品的频率,y=人数,fill=性别))+
geom_col(width=0.8,position="dodge",color="gray50")+
geom_text(aes(label=人数),position=position_dodge(0.9),size=3,hjust=1.5)+
coord_flip()+ # 坐标轴互换
scale_fill_brewer(palette="Set2")+
#ylim(0,1.1*max(df1$人数))+ # 设置y轴范围
ggtitle("(b) 水平并列条形图")
# 图(c) 垂直堆叠条形图
p3<-ggplot(df2,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("(c) 垂直堆叠条形图")
# 图(d) 水平堆叠条形图
p4<-p3+coord_flip()+ggtitle("(d) 水平堆叠条形图")
grid.arrange(p1,p2,p3,p4,ncol=2) # 按2列组合图形- 图形解读:从图形来看,女性购买养生食品的人数多于男性;在频率上,更倾向于半年一次或更少、一季度多次;对应的收入来看,收入为3000-1000的人群更愿意购买养生食品。
3 数据分布可视化
3.1 案例数据解释与展示
- 该数据为居民消费水平数据(单位:千万)。
data2 = read_xlsx("E:\\数据可视化\\期末报告\\期末数据\\居民消费水平数据.xlsx")
DT::datatable(data2,rownames = FALSE)data2$全国居民消费水平<- as.numeric(as.character(data2$全国居民消费水平))
data2$城镇居民消费水平<- as.numeric(as.character(data2$城镇居民消费水平))
df <- data2 |> select(全国居民消费水平,城镇居民消费水平) |>
gather(全国居民消费水平,城镇居民消费水平,key=指标,value=指标值) # 融合数据
DT::datatable(df,rownames = FALSE)3.2 图形2——叠加直方图和镜像直方图
# 图(a)叠加直方图
p1<-ggplot(df)+aes(x=指标值,y=..density..,fill=指标)+
geom_histogram(position="identity",color="gray60",alpha=0.5)+
theme(legend.position=c(0.8,0.8),# 设置图例位置
legend.background=element_rect(fill="grey90",color="grey"))+
# 设置图例背景色和边框颜色
ggtitle("(a) 全国居民消费水平,城镇居民消费水平的叠加直方图")
# 图(b)镜像直方图
p2<-ggplot(data2)+aes(x=x)+
geom_histogram(aes(x=全国居民消费水平,y=..density..),color="grey50",fill="red",alpha=0.3)+ # 绘制全国居民消费水平的直方图(上图)
geom_label(aes(x=160,y=0.0065),label="全国居民消费水平",color="red")+ # 添加标签
geom_histogram(aes(x=城镇居民消费水平,y=-..density..),color="grey50",fill="blue",alpha=0.3)+ # 绘制城镇居民消费水平的直方图(下图)
geom_label(aes(x=120,y=-0.0075),label="城镇居民消费水平",color="blue")+ # 添加标签
xlab("指标值")+ggtitle("(b) 全国居民消费水平,城镇居民消费水平的镜像直方图")
gridExtra::grid.arrange(p1,p2,ncol=2) # 组合图形- 图形解读:图一:在指标值为1时,全国居民消费水平较为集中;在指标3、4时,城镇居民消费水平较为集中,说明城镇居民更偏向于在此处消费。图二:全国居民消费水平与城镇居民消费水平密度水平总体一致,但在某些部分城镇居民消费水平密度更为突出。
4 变量关系可视化
4.1 案例数据解释与展示
- 该数据与上面数据一样,但在此处对所要研究的全国居民消费水平、城镇居民消费水平两个变量做了转变为数值型数据的处理。
data2 = read_xlsx("E:\\数据可视化\\期末报告\\期末数据\\居民消费水平数据.xlsx")
DT::datatable(data2,rownames = FALSE)data2$全国居民消费水平<- (as.character(data2$全国居民消费水平))
data2$城镇居民消费水平<- as.numeric(as.character(data2$城镇居民消费水平))4.2 图形3——散点图和置信带
df<-data2
p1<-ggplot(data=df,aes(x=全国居民消费水平,y=城镇居民消费水平))+
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(城镇居民消费水平)),shape=21,fill="yellow",size=4)+ # 绘制均值点
ggtitle("(a) 散点图+地毯图+线性拟合")
p2<-ggplot(data=df,aes(x=农村居民消费水平,y=城镇居民消费水平))+
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(城镇居民消费水平)),shape=21,fill="yellow",size=4)+
ggtitle("(b) 散点图+地毯图+loess拟合")
grid.arrange(p1,p2,ncol=2) # 按2列组合图形p1和p2- 图形解读:图(a):1.变量关系呈现全国居民消费水平和城镇居民消费水平的关联,线性拟合线表明二者大致呈强线性正相关,即全国居民消费水平提升,城镇居民消费水平往往随之上升。 2.数据分布:散点分布围绕拟合线,多数点贴近直线,说明线性模型对数据拟合度较好;黄色点为异常值或重点关注数据。
- 图(a):1.变量关系:展示农村居民消费水平和城镇居民消费水平的关系,loess 拟合线是曲线,说明二者并非严格线性,而是非线性正相关,农村居民消费水平增长到一定程度后,城镇居民消费水平增长趋势有变化(如增速变缓 / 加快 )。 2.数据分布:散点随拟合线波动,黄色点同样可能是异常值;相比线性拟合,loess 更贴合数据局部特征,能反映农村与城镇居民消费水平关系的非线性细节。
5 样本相似性可视化
5.1 案例数据解释与展示
- 该数据为北京市、天津市、广东省、新疆四个地区的科技创新相关数据。“R&D” 通常是 “Research and Development” 的缩写,即研究与开发(研发),是企业、机构等为创新技术、产品或服务,开展的创造性研究与试验发展活动,涵盖基础研究、应用研究、试验开发等阶段,在科技、工业等领域推动技术进步与新产品诞生
data4 = read_xlsx("E:\\数据可视化\\期末报告\\期末数据\\部分地区科技数据.xlsx")
DT::datatable(data4,rownames = FALSE)df <- data4 |> gather("R&D人员":"规模以上高技术产业企业数",key=科技项目,value=数量) |>
mutate(科技项目=fct_inorder(科技项目))
datatable(df,rownames = FALSE)5.2 图形4——平行坐标图
# 绘制平行坐标图
ggplot(df,aes(x=科技项目,y=数量,group=地区,color=地区))+
geom_line(linewidth=0.5)+ # 绘制折线
geom_point(shape=21,size=1.5,fill="gray50")+ # 绘制点
theme(legend.position=c(0.75,0.66),
legend.text=element_text(size=7,color="blue4"),
legend.direction="horizontal", # 设置图例位置和摆放方向
legend.background=element_rect(fill="grey90",color="grey"))+
guides(color=guide_legend(nrow=8,title=NULL))+ # 设置图例摆放方式(8行,去掉图例标题)
scale_x_discrete(labels=function(x) str_wrap(x,width=8)) # 设置x轴标签宽度图形解读:
1. 地区差异
广东省:在 “高等学校数”“规模以上高技术产业企业数” 指标中数值突出(尤其是高等学校数,远高于其他地区 ),显示广东在高校资源、高技术企业布局上优势明显,科研与产业转化的基础支撑较强。
北京市:“规模以上高技术产业企业数” 有一定表现,“R&D 人员”也有基础,体现北京科研人才储备与高技术产业的关联,但 “高等学校数” 等指标未显特别优势,或因统计口径 / 产业结构差异。
天津市、新疆维吾尔自治区:各指标数值整体偏低,反映在 R&D人力、经费投入强度、高校及高技术企业数量上,与广东、北京存在差距,科技资源与产业发展的活跃度相对弱。
指标关联
R&D 人员与企业数:北京、广东的 “R&D 人员” 有基础,后续 “规模以上高技术产业企业数” 也有体现,暗示科研人才储备对高技术企业发展有支撑;天津、新疆 R&D 人员少,企业数也少,或反映人才与产业协同不足。
高等学校数的影响:广东 “高等学校数” 极高,后续 “规模以上高技术产业企业数” 表现好,可能说明高校资源(科研成果、人才输出 )对高技术产业有显著推动;其他地区高校数少,产业企业数也受限制。
整体趋势
各地区 “R&D 经费投入强度” 数值极低(近乎 0 ),可能是统计特殊(如指标单位、数据范围 )或反映经费投入强度并非此维度核心关注;整体来看,广东在科技项目多维度呈现领先,区域科技发展不均衡特征显著,资源集中在少数地区,其他地区需强化人才、高校、产业协同布局 。
总的来说,这张图展现了广东等地区在科技资源(人才、高校、企业)上的优势,也暴露了区域科技发展的不均衡,能为政策倾斜、资源调配(如补短板、强协同 )提供数据视角参考。
6 时间序列可视化
6.1 案例数据解释与展示
- 该数据为广东省卫生健康相关数据。为了避免不同变量的数据相差太大的问题,对部分变量的单位进行了调整;并对时间数据进行了数据类型转换。
data5 = read_xlsx("E:\\数据可视化\\期末报告\\期末数据\\广东省卫生健康数据.xlsx")
DT::datatable(data5,rownames = FALSE)data5$year <- as.Date(data5$year, format = "%Y")6.2 图形5——折线图
# 选择绘图变量并融合为长格式
df1<-data5 |> select(year,医疗卫生机构数,卫生人员数) |>
gather(医疗卫生机构数,卫生人员数,key="指标",value="指标值")
df2<-data5 |> select(year,医疗卫生机构数:城镇居民人均医疗保健支出) |>
gather(2:4,key="指标",value="指标值") |>
mutate(指标=fct_inorder(指标))
# 设置绘图主题
mytheme<-theme(legend.position=c(0.2,0.8), # 将图例放在图内
legend.background=element_blank()) # 移除图例整体边框
p1<-ggplot(df1,aes(x=year,y=指标值,color=指标))+ # 设置x轴、y轴和线的颜色
geom_line(size=0.8)+
geom_point(aes(shape=指标),size=2)+ # 数值点的形状和大小
mytheme+ggtitle("(a)医疗卫生机构数与卫生人员数折线图 ")
p2<-p1 %+% df2+ggtitle("(b) 卫生健康指标折线图")
gridExtra::grid.arrange(p1,p2,ncol=2)图形解读:
图 (a):
卫生人员数:呈现持续快速增长趋势,2010 - 2020 年从约 60 万逐步攀升至 100 万左右,反映卫生人力队伍不断壮大,医疗服务人力供给持续加强。
医疗卫生机构数:数值低且增长极其缓慢,几乎维持在同一水平,说明这段时期内医疗卫生机构的数量扩张有限,可能受布局规划、资源约束等影响,机构总量未明显增加。
图 (b):
医疗卫生机构数:和图 (a) 对应指标一致,平稳小幅上升,验证机构数量缓慢增长的趋势,体现医疗服务载体规模的稳定扩充节奏。
卫生总费用:持续上升,从 2010 年较低水平逐步增长,反映全社会在医疗卫生领域的资金投入不断增加,对医疗服务、保障的资源支持力度加大。
城镇居民人均医疗保健支出:基本保持平稳,虽有微弱波动但整体变化小,说明城镇居民在医疗保健方面的人均消费支出相对稳定,或受医保保障、消费习惯等因素影响。
综合来看 ,卫生人力(卫生人员数)增长显著,机构数增长滞后,可能存在 “人增机构少” 的结构差异,后续需关注机构资源配置与人力适配。 卫生总费用提升,体现对医疗重视与投入加大,但城镇居民人均医疗支出平稳,需看投入产出效率、保障覆盖效果,也反映医疗投入既有宏观层面的社会支持,也有微观层面居民消费的稳定特征 。