如何从不同来源启动ggplot2 geom_bar

Jac*_*son 5 r ggplot2

我想在 y = 0 以外的位置开始绘制条形图。就我而言,我想在 y = 1 处开始绘制条形图。

举个例子,假设我geom_bar()使用 ggplot2 构建了恒等图表。

df <- data.frame(values = c(1, 2, 0),
                 labels = c("A", "B", "C"))

library(ggplot2)
ggplot(df, aes(x = labels, y = values, fill = labels, colour = labels)) + 
  geom_bar(stat="identity")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

现在,我不是问如何设置比例或轴限制。我希望代表小于 1 的值的条形图从 y = 1 开始向下流动。

它需要看起来像这样......但具有不同的 y 轴:

在此输入图像描述

有什么建议吗?

Cla*_*lke 6

您可以手动更改标签,如其他答案所示。然而,我认为从概念上讲,更好的解决方案是定义一个转换对象,根据要求转换 y 轴比例。使用这种方法,您实际上只是修改条形图的相对基线,并且您仍然可以像平常一样设置中断和限制。

df <- data.frame(values = c(1,2,0), labels = c("A", "B", "C"))

t_shift <- scales::trans_new("shift",
                             transform = function(x) {x-1},
                             inverse = function(x) {x+1})

ggplot(df, aes(x = labels, y = values, fill = labels, colour = labels)) + 
  geom_bar(stat="identity") +
  scale_y_continuous(trans = t_shift)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

设置中断和限制:

ggplot(df, aes(x = labels, y = values, fill = labels, colour = labels)) + 
  geom_bar(stat="identity") +
  scale_y_continuous(trans = t_shift,
                     limits = c(-0.5, 2.5),
                     breaks = c(0, 1, 2))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述