[英]how to plot negative numbers from small to large value using geom_bar in ggplot2
我希望能够 plot 从左到右只使用负值的条形图。 低值在左侧,条形长度达到单个观察值。 如果我需要给出一个起始最小值,我可以这样做,在我下面提供的示例中说 -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
geom,例如,它们实际上从0 开始并扩展到y
美学。 因此,对于以 -105 结束的条形,geom 从 0 延伸到 -105。 这意味着当您在scale_y_reverse()
或ylim()
内部使用limits=
放大时,它会缩放轴,但它不再 plot 这些几何图形(因为它们超出了这些限制)。
要放大但保留所有几何图形,无论它们是否超出限制集,您可以在任何coord_*
function 内设置这些限制。这包括coord_cartesian()
,或者在您的情况下, coord_flip()
。 这是放大后的样子。我还将y
轴上的breaks
设置得更小以适应不同的缩放:
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()
再次强调,以这种方式显示条形图是非常糟糕的做法。 原因是在上面的 plot 中, z
看起来大约是y
值的两倍,而实际上z
的值是 -99, y
的值是 -87。 绝对不是y
的两倍,除非您从 -80 处“开始”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.