ggplot中反转Y轴后,如何让柱状图从底部向上延伸?
解决方法
你需要换个思路,直接用scale_y_reverse会让柱子从顶部往下长——因为它默认从0开始绘制,反转后0跑到了Y轴顶部。要让柱子从底部往上伸,同时保持Y轴上方是低数值,可以这么做:
方法一:计算反转数值并自定义刻度
先把原始Count值转换成「最大值减当前值」,这样原始数值越低,转换后的值越大,柱子就会向上延伸更长。然后再把Y轴刻度改回原始的Count数值,让显示和需求匹配。
代码示例:
o <- data.frame('Time'=c(24,48),'Count'=c(20,40)) # 先拿到Count的最大值 max_count <- max(o$Count) # 生成反转后的数值列 o$Rev_Count <- max_count - o$Count ggplot(o, aes(x=as.factor(Time), y=Rev_Count)) + geom_col() + # 自定义Y轴刻度,显示原始Count数值,从上到下是20、40 scale_y_continuous( breaks = c(max_count - 20, max_count - 40), labels = c(20, 40), expand = c(0, 0) # 让柱子贴紧Y轴底部 ) + ylab("Count") # 保持Y轴标签不变
方法二:直接定义柱子的上下范围
用geom_col的ymin和ymax参数指定柱子的起始和结束位置,结合scale_y_reverse实现需求:
o <- data.frame('Time'=c(24,48),'Count'=c(20,40)) ggplot(o, aes(x=as.factor(Time))) + # 柱子从最大值(反转后是Y轴底部)延伸到最大值减Count(对应原始低数值,在Y轴上方) geom_col(aes(ymin = max(Count), ymax = max(Count) - Count)) + scale_y_reverse() + ylab("Count")
两种方法都能实现:Y轴上方显示低数值,柱状图从底部向上延伸的效果。
内容的提问来源于stack exchange,提问作者muratdus
相关产品推荐
相关产品推荐

