You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R语言ggplot2中使用多列数据作为X轴取值

解决方案

ggplot2默认基于长格式数据进行映射,你需要先将存储多组数值的宽表转为长表,同时修正原代码的几处语法错误,示例代码如下:

# 加载依赖包
library(tidyverse)

# 构造基础数据,修正原代码中loc向量缺失的逗号
blue <- c(83, 81, 80, 71, 69, 63, 63, 62, 54)
red <- c(112, 96, 111, 141, 125, 89, 178, 107, 130)
loc <- c("YISHUN", "WOODLANDS", "HOUGANG", "ANG MO KIO", "TAMPINES", "SENGKANG", "GEYLANG", "BEDOK", "JURONG WEST")

# 构建数据框并转为长格式
df <- tibble(loc, blue, red) %>% 
  pivot_longer(cols = c(blue, red), names_to = "group", values_to = "value")

# 绘制哑铃图
ggplot(df, aes(y = loc)) +
  # 连线直接用原始宽表的两列作为起止值
  geom_segment(aes(x = blue, xend = red, yend = loc), data = tibble(loc, blue, red), color = "gray") +
  # 点按分组上色
  geom_point(aes(x = value, color = group), size = 3) +
  # 自定义颜色匹配需求
  scale_color_manual(values = c("blue" = "blue", "red" = "red")) +
  labs(x = "数值", y = "区域", color = "分组")

核心原理说明

  • 你遇到的多列无法直接映射为X轴的问题,本质是ggplot2的美学映射要求每个维度对应数据框的单独一列:如果要把blue和red两组值作为同一X轴下的不同分组,需要通过长宽转换把两组值合并到同一列,额外新增一列标注分组归属。
  • 连线的geom_segment可以直接引用原始宽表的两列作为X轴的起止值,不需要额外转换。

内容的提问来源于stack exchange,提问作者Disdainty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 06:54:01