使用ggplot2绘制dataframe列频次条形图时aes的x、y如何设置?
实现方案
你要的效果可以直接用geom_bar的默认计数逻辑实现,不需要手动预统计次数:
library(ggplot2) df = data.frame(a = c(6,3,8,7,9), b = c(1,1,2,2,1)) ggplot(data=df, aes(x = factor(b))) + geom_bar()
aes参数说明
geom_bar默认的统计方式是stat = "count",会自动计算每个x分组的观测数量作为柱子高度,因此:
- 不需要手动填写y参数
- x参数填
factor(b)即可(如果直接填b也能出图,但x轴会被识别为连续数值轴,转成因子可以让x轴显示为分类轴,更符合条形图的展示逻辑)
如果你一定要显式指定y参数,需要先对b列的取值做计数汇总,再搭配stat = "identity"参数使用:
library(ggplot2) library(dplyr) df = data.frame(a = c(6,3,8,7,9), b = c(1,1,2,2,1)) # 先统计每个b值的出现次数 df_count <- df %>% count(b) ggplot(data=df_count, aes(x = factor(b), y = n)) + geom_bar(stat = "identity")
两种写法最终输出的柱子高度都是b=1对应3、b=2对应2,符合你的预期。
内容的提问来源于stack exchange,提问作者Lukas
相关产品推荐
相关产品推荐

