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

如何用ggplot制作展示指定x值与对应y数据的条形图?

解决方案

你的数据中x仅包含0和1两个取值,其中x=1对应1个y值,x=0对应7个y值。原代码的核心问题是轴映射关系搞反,且未处理x的离散属性,导致图形不符合预期。以下是两种贴合需求的可行方案:

方案1:展示每个y数据点对应x值的独立条形

如果需要将每个y值都做成独立条形,并按x的取值分组排列,使用以下代码:

library(ggplot2)

data <- data.frame(
  x=c(1,0,0,0,0,0,0,0),  
  y=c(0.1311971,-0.07654406,0.3615017,0.5084337,0.8668116,0.4528717,-0.1093398,-0.7381238)
)

ggplot(data, aes(x = factor(x), y = y)) +
  geom_col(position = "dodge", alpha = 0.7) +
  labs(x = "x取值", y = "y值", title = "x取值对应y数据点的条形图")
  • 将x转为factor(x),是为了让x轴显示离散类别(0和1),而非连续数值
  • position="dodge"可避免同x值的条形重叠;若想让条形轻微错开,可替换为position="jitter"

方案2:按x取值聚合y值做条形

如果需求是每个x取值对应一个条形,高度为该组y值的统计量(比如均值),使用以下代码:

ggplot(data, aes(x = factor(x), y = y)) +
  stat_summary(fun = mean, geom = "col", fill = "steelblue") +
  stat_summary(fun.data = mean_se, geom = "errorbar", width = 0.2) +
  labs(x = "x取值", y = "y的均值", title = "x取值对应y均值的条形图")

原代码问题说明

你原代码中aes(x=y, y=x)完全颠倒了轴映射关系,且geom_bar(stat="identity")在x轴为连续值(原代码用y列作为x轴,是连续数值)时,会错误地将连续值当作离散类别处理,最终导致图形混乱。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 14:43:08