求解:如何绘制以Majors为X轴、MEASURES为Y轴的多变量可视化图表
R语言可视化需求解决方案
问题背景
我有如下R语言数据框:
DF <- data.frame(Majors = c('Sam', 'Bob', 'Henry', 'John', 'Ted', 'Carl', 'Robert', 'Matt', 'Jared', 'Jack', 'Greg', 'Arthur', 'Glenn'), MEASURES = c('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M'), LCOs = c(1.1, 2.1, 3.3, 4.1, 1.2, 1.1, 2.4, 3.3, 2.3, 1.1, 2.1, 1.4, 7), Years=c('2017-2018', '2017-2018', '2017-2018', '2018-2019', '2018-2019', '2018-2019', '2018-2019', '2019-2020', '2020-2021', '2020-2021', '2020-2021', '2020-2021', '2021-2022'))
需要制作满足以下要求的可视化内容:
- X轴(底部)为
Majors,Y轴(侧边)为MEASURES - 对应位置展示
LCOs的数值 - 用颜色区分不同
Years的条目
尝试过ggplot2和kable未达到预期效果,寻求可行方案。
方案1:使用gt包生成可视化表格
gt包专门用于制作美观的静态/交互式表格,完美匹配需求:
步骤1:安装并加载包
install.packages("gt") library(gt)
步骤2:生成可视化表格
DF %>% # 设置行名为MEASURES,列名为Majors gt(rowname_col = "MEASURES", colname_col = "Majors") %>% # 按Years设置单元格背景色 data_color( columns = everything(), colors = scales::col_factor( palette = c("#1f77b4", "#ff7f0e", "#2ca02c", "#d62728"), # 自定义调色板 domain = unique(DF$Years) ), apply_to = "fill" ) %>% # 格式化LCOs数值为1位小数 fmt_number(columns = everything(), decimals = 1) %>% # 添加标题和注释 tab_header(title = "LCOs 按专业与指标分布") %>% tab_source_note(source_note = "颜色对应不同学年")
生成的表格会以MEASURES为行、Majors为列,单元格显示LCOs数值,背景色对应所属Years,支持自定义调色板和格式。
方案2:使用ggplot2制作热力图
如果更倾向于图表形式,ggplot2可以实现带文本标注的热力图:
步骤1:安装并加载包
install.packages("ggplot2") library(ggplot2)
步骤2:生成热力图
ggplot(DF, aes(x = Majors, y = MEASURES)) + # 绘制单元格背景,按Years填充颜色 geom_tile(aes(fill = Years), color = "white") + # 添加LCOs数值标注 geom_text(aes(label = LCOs), color = "black", size = 4) + # 使用内置调色板 scale_fill_brewer(palette = "Set2") + # 添加标题和坐标轴标签 labs(title = "LCOs 热力分布图", x = "专业", y = "指标", fill = "学年") + # X轴标签倾斜45度避免重叠 theme(axis.text.x = element_text(angle = 45, hjust = 1))
该图表将Majors置于X轴,MEASURES置于Y轴,每个单元格颜色对应Years,同时显示LCOs数值,布局清晰直观。
内容的提问来源于stack exchange,提问作者RKeithL
相关产品推荐
相关产品推荐

