数据框已按频次降序时,如何让ggplot2按此顺序展示分类轴柱状图
问题核心原因
ggplot2绘制离散分类柱状图时,会默认将字符型的start_station_name变量转换为按字典序(字母/拼音顺序)排序的因子,该排序规则和数据框的行排序无关联,因此即使数据框行是按频次降序排列,x轴也会按名称字典序排布。
解决方法
方法1:直接在aes()中用reorder()指定排序
无需修改原有数据框,直接将x轴变量按照freq的降序排列即可:
ggplot(d2, aes(x = reorder(start_station_name, -freq), y = freq)) + geom_bar(stat = "identity") + theme(axis.text.x = element_blank()) + ylim(c(0, 35000))
reorder(A, B)的作用是将分类变量A按照变量B的数值大小排序,添加负号-freq即指定按freq降序排列,符合从左到右柱高递减的需求。
方法2:预先将站点名称设为指定顺序的因子
你已经通过order()函数将d2按频次降序排列完成,可直接用现有行顺序指定因子的水平顺序,效果与方法1完全一致:
# 转换因子并指定水平顺序 d2$start_station_name <- factor(d2$start_station_name, levels = d2$start_station_name) # 绘制柱状图 ggplot(d2, aes(x = start_station_name, y = freq)) + geom_bar(stat = "identity") + theme(axis.text.x = element_blank()) + ylim(c(0, 35000))
内容的提问来源于stack exchange,提问作者Vanderdecken
相关产品推荐
相关产品推荐

