如何解决如何使用ggplot2中的geom_bar从小数值到大数值绘制负数
我希望能够仅使用负值从左到右绘制条形图。低值位于左侧,钢筋长度达到单个观测值。如果需要提供一个起始最小值,可以这样做,在下面提供的示例中为-105。
由于某些原因,我无法使用xlim或ylim来控制比例
a <- as.factor(c("x","y","z"))
b <- c(-105,-87,-99)
neg_tib <- tibble(a,b)
neg_plot <- ggplot(neg_tib,aes(x = a,y = b))+
geom_bar(stat = "identity",position = "identity",color = "blue",fill = "transparent",width = .1) +
scale_y_continuous(breaks = c(-80,-100)) +
coord_flip() +
theme_tufte()
解决方法
您可以使用scale_y_reverse()
而不是scale_y_continuous()
来反转您的轴并得到反转条形的东西。我还每20个单位添加一次中断,以使其看起来更完整:
neg_plot <- ggplot(neg_tib,aes(x = a,y = b))+
geom_bar(stat = "identity",position = "identity",color = "blue",fill = "transparent",width = .1) +
scale_y_reverse(breaks = seq(0,-100,by=-20)) +
coord_flip() +
theme_tufte()
强烈建议不要在条形图上设置轴限制,因为通常惯例是条从0开始“开始”。如果要显示在轴上设置限制的位置,建议您使用其他几何图形(点,线,等等...取决于您的数据。
尽管如此,如果您绝对必须“放大”条形边缘的边缘,则可以在coord_flip()
内设置限制。为什么呢?您可以在scale_y_reverse(limits=c(...))
中设置限制;但是,就像其他scale_*
函数一样,这些函数中的限制以及通过xlim()
和ylim()
的结果最终放大了数据并删除了那些限制之外的数据点。这并不总是一个问题,但是例如对于bar
和col
几何,它们实际上是从0开始开始并扩展到y
美学的范围。是。因此,对于以-105结尾的钢筋,几何图形从0延伸到-105。这意味着当您在limits=
或scale_y_reverse()
内使用ylim()
进行放大时,它将缩放轴,但是将不再绘制这些几何图形(因为它们超出了这些限制)。 / p>
要放大但保留所有几何图形而不管它们是否超出设置的限制,可以在任何coord_*
函数内设置这些限制。其中包括coord_cartesian()
,或者您的情况包括coord_flip()
。这就是放大的样子。我还将breaks
轴上的y
设置得较小,以适应不同的缩放比例:
neg_plot <- ggplot(neg_tib,by=-20)) +
coord_flip() +
theme_tufte()
再次,我必须强调以这种方式显示条形图确实是一种不好的做法。原因是在上图中,z
约为y
的两倍,而实际上z
的值为-99,而{{1}的值为}是-87。 绝对不是y
的两倍,除非您从-80开始。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。