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

