如何用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
相关产品推荐
相关产品推荐

