如何在R或ggplot2中绘制类矩阵小型数据集的可视化图表
展示多挑战响应计数:Base R & ggplot2 实现方案
你的数据集是宽格式(每行对应一个挑战,列记录不同响应的计数),绘图前需先处理数据格式,再选择并列/堆叠条形图展示所有挑战的计数分布。以下是两种工具的具体实现:
第一步:预处理数据
原数据中计数列是table类,需先转为普通数值,同时处理缺失值:
# 转换table类列为数值型 DATA[] <- lapply(DATA, function(x) if(inherits(x, "table")) as.numeric(x) else x) # 替换NA为0(避免绘图报错) DATA[is.na(DATA)] <- 0
ggplot2 实现(推荐,灵活美观)
ggplot2更适配tidy格式数据,先转成长格式再绘图:
library(tidyr) library(ggplot2) # 转成长格式(tidy data) tidy_data <- pivot_longer(DATA, cols = -Challenge, names_to = "响应选项", values_to = "计数") # 绘制并列条形图(便于对比同一挑战的不同响应) ggplot(tidy_data, aes(x = reorder(Challenge, -计数), y = 计数, fill = 响应选项)) + geom_bar(stat = "identity", position = position_dodge2(preserve = "single")) + labs(title = "各挑战的受访者响应计数", x = "挑战类型", y = "响应人数", fill = "响应选项") + theme(axis.text.x = element_text(angle = 45, hjust = 1)) + # 旋转x轴标签避免重叠 scale_fill_brewer(palette = "Set2") # 选用清晰的配色方案 # 若要堆叠条形图,只需修改position参数: # geom_bar(stat = "identity", position = "stack")
Base R 实现(原生无需额外包)
Base R用barplot函数,直接基于宽格式矩阵绘图:
# 提取数值矩阵,设置行名为挑战名称 plot_matrix <- as.matrix(DATA[, -1]) rownames(plot_matrix) <- DATA$Challenge # 绘制并列条形图 barplot(t(plot_matrix), beside = TRUE, col = hcl.colors(ncol(plot_matrix), "Viridis"), main = "各挑战的受访者响应计数", xlab = "挑战类型", ylab = "响应人数", las = 2) # 旋转x轴标签至垂直 # 添加图例 legend("topright", legend = colnames(plot_matrix), fill = hcl.colors(ncol(plot_matrix), "Viridis"), cex = 0.8) # 缩小图例适配画面 # 若要堆叠条形图,去掉beside=TRUE即可
关键说明
- 转长格式:ggplot2依赖tidy数据结构(每一行对应一个观测),便于映射颜色、x/y轴等美学属性
- 旋转x轴标签:因挑战名称较长,旋转后避免标签重叠,提升可读性
- 处理NA:原数据中存在缺失值,替换为0后保证绘图完整性
内容的提问来源于stack exchange,提问作者Simon Harmel
相关产品推荐
相关产品推荐

