如何从不同的起源启动ggplot2 geom_bar

时间:2018-02-14 19:12:07

标签: r ggplot2

我想在y = 0以外的某个地方开始一个条形图。在我的情况下,我想在y = 1处开始条形图。

例如,假设我使用ggplot2构建了一个身份geom_bar()图表。

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")

enter image description here

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

它需要看起来像这样......但是使用不同的y轴:

enter image description here

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

您可以使用

ggplot(df, aes(x = labels, y = values-1, fill = labels, colour = labels)) + 
  geom_bar(stat = "identity") +
  scale_y_continuous(name = 'values', 
                     breaks = seq(-1, 1, 0.5), 
                     labels = seq(-1, 1, 0.5) + 1)

enter image description here

答案 1 :(得分:2)

您可以手动更改标签,如另一个答案所示。但是,我认为从概念上讲,更好的解决方案是定义一个转换对象,该对象根据请求转换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)

enter image description here

设置中断和限制:

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))

enter image description here