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

使用ggplot绘制柱状图时Y轴显示数值不符的原因咨询

问题

我拥有如下数据表:

structure(list(Species = structure(c(2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), levels = c("setosa", 
"versicolor", "virginica"), class = "factor"), Variables = c("PetalLength", 
"PetalLength", "PetalLength", "PetalLength", "PetalLength", "PetalLength", 
"PetalLength", "PetalLength", "PetalWidth", "PetalWidth", "PetalWidth", 
"PetalWidth", "PetalWidth", "PetalWidth", "PetalWidth", "PetalWidth", 
"SepalLength", "SepalLength", "SepalLength", "SepalLength", "SepalLength", 
"SepalLength", "SepalLength", "SepalLength", "SepalWidth", "SepalWidth", 
"SepalWidth", "SepalWidth", "SepalWidth", "SepalWidth", "SepalWidth", 
"SepalWidth"), Values = c(4.7, 4.5, 4.9, 4.7, 4.4, 4.8, 4.5, 
4.7, 1.4, 1.5, 1.5, 1.6, 1.4, 1.8, 1.6, 1.5, 7, 6.4, 6.9, 6.3, 
6.7, 5.9, 6, 6.7, 3.2, 3.2, 3.1, 3.3, 3.1, 3.2, 3.4, 3.1)), row.names = c(NA, 
-32L), class = c("tbl_df", "tbl", "data.frame"))

尝试绘制最基础的柱状图,代码如下:

grafico <- ggplot (data = tabela, aes (x = Variables, y = Values)) +
geom_bar (stat = "identity") +
windows (); grafico

但绘制结果的Y轴显示数值范围为0到60,而我的Values列数据是0到10的小数,请问这是为什么?

原因与解决方法

原因

你的数据表中,每个Variables类别(比如PetalLength)下对应8条重复的观测值,geom_bar(stat="identity")会默认将同一x轴分组下的所有y值累加求和,最终柱子的高度是该组所有Values的总和。例如SepalLength组的8个数值总和为51.9,所以Y轴会扩展到60以容纳这个总和,而非单个数值的范围。

解决方法

根据你的需求选择对应方案:

  • 展示每个数据点的分布:使用散点类图层避免重叠,或用箱线图展示分布特征
    # 带抖动的散点图
    grafico <- ggplot(data = tabela, aes(x = Variables, y = Values)) +
      geom_jitter(width = 0.2)
    grafico
    
    # 箱线图
    grafico <- ggplot(data = tabela, aes(x = Variables, y = Values)) +
      geom_boxplot()
    grafico
    
  • 展示每组的统计量(如均值):用stat_summary计算并绘制指定统计量
    # 绘制每组均值的柱状图
    grafico <- ggplot(data = tabela, aes(x = Variables, y = Values)) +
      stat_summary(fun = mean, geom = "bar")
    grafico
    
  • 展示每个单独数值的柱子:需为每个数值设置独立的x轴分组(会导致x轴标签拥挤,仅建议小数据量使用)
    grafico <- ggplot(data = tabela, aes(x = interaction(Variables, row.names(tabela)), y = Values)) +
      geom_bar(stat = "identity") +
      theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1))
    grafico
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 19:25:34