在R语言中绘制含4个变量的四象限坐标图的实现方法咨询
实现思路
- 你可以通过自定义坐标轴映射的方式实现该四象限图,核心逻辑是:将绘图坐标的x/y轴范围设为
-25到25,用正负值区分四个象限,再将坐标轴标签替换为0~25的正值,即可实现无负值的四象限展示 - 四个变量分别对应四个轴段:x轴右半段对应varA、左半段对应varC,y轴上半段对应varB、下半段对应varD
- 单个人的四个得分可映射为四个象限内的点,也可根据业务逻辑将四个得分组合为单个坐标点展示
实现代码
# 加载所需包 library(ggplot2) # 样例数据 df <- data.frame( name = c("Donald", "Minnie", "Pluto"), varA = c(3, 6, 15), varB = c(4, 17, 6), varC = c(26, 21, 13), varD = c(10, 19, 19) ) # 选择要展示的人员 target_name <- "Minnie" person_vals <- df[df$name == target_name, ] # 构造绘图数据(四个象限各对应一个变量组合点,可根据需求调整映射逻辑) plot_data <- data.frame( quadrant = c("varA+varB", "varC+varB", "varC+varD", "varA+varD"), x = c(person_vals$varA, -person_vals$varC, -person_vals$varC, person_vals$varA), y = c(person_vals$varB, person_vals$varB, -person_vals$varD, -person_vals$varD) ) # 绘图 ggplot() + # 绘制象限分割线 geom_vline(xintercept = 0, linewidth = 1) + geom_hline(yintercept = 0, linewidth = 1) + # 绘制得分点 geom_point(data = plot_data, aes(x = x, y = y), size = 4, color = "red") + # 自定义坐标轴:将负值转为正值展示,限定得分范围0-25 scale_x_continuous( limits = c(-25, 25), breaks = seq(-25, 25, 5), labels = abs(seq(-25, 25, 5)), name = "varC / varA" ) + scale_y_continuous( limits = c(-25, 25), breaks = seq(-25, 25, 5), labels = abs(seq(-25, 25, 5)), name = "varB / varD" ) + # 添加象限标注 annotate("text", x = 12.5, y = 12.5, label = "varA & varB", size = 5) + annotate("text", x = -12.5, y = 12.5, label = "varC & varB", size = 5) + annotate("text", x = -12.5, y = -12.5, label = "varC & varD", size = 5) + annotate("text", x = 12.5, y = -12.5, label = "varA & varD", size = 5) + # 主题调整 theme_minimal() + theme( panel.grid = element_blank(), axis.text = element_text(size = 12), axis.title = element_text(size = 14) ) + # 标题设置 ggtitle(paste(target_name, "四象限得分展示"))
自定义调整说明
- 若需要展示单个坐标点,可根据业务逻辑将四个变量的数值计算为最终的x/y坐标,替换上述
plot_data的映射规则即可 - 可自行修改点的大小、颜色、象限标注文本、坐标轴名称等参数匹配展示需求
- 数据中超出0-25范围的得分会自动被截断在坐标轴外,可提前做数据截断处理避免异常
内容的提问来源于stack exchange,提问作者BLS
相关产品推荐
相关产品推荐

