在ggplot中在x轴和条之间添加一些空间

时间:2019-05-12 08:21:54

标签: r ggplot2

我有以下数据框:

df = data.frame(x = c('a', 'b'),
                y = c(2,4))

和相应的图形:

ggplot(df, aes(x,y)) + 
  geom_col()

enter image description here

我的比例从1到5,所以我不希望0出现在y轴上,而是希望y轴从1开始。但是我仍然希望条形下面的空白。

ggplot(df, aes(x,y)) + 
  geom_col() + 
  coord_cartesian(ylim = c(1,4)) +
  scale_y_continuous(
    expand = expand_scale(add = c(0.2,0)))

enter image description here

如您所见,y轴确实从1开始,但是现在1下方的空间被黑条填充,不再是空白。我咨询过的其他帖子都处理了y轴从0开始的情况,因此expand_scale()完成了这项工作。就我而言不是。

关于如何解决此问题的任何想法?

4 个答案:

答案 0 :(得分:2)

在ggplot中,您可以使用position_nudge()平稳地将整个几何移动固定距离:

ggplot(df, aes(x,y)) + 
      geom_col(position = position_nudge(y=1)) + #move everything up one
      ylim(c(0,5)) #set the y axis limits

答案 1 :(得分:2)

您可以使用scale_y_continuous中的限制来表示要显示的范围。限制中的NA是“使用默认值”。现在,通常这将消除两个小节,因为它们是越界(oob),但是您可以通过将刻度的oob参数设置为squish来解决此问题,这是一个函数在秤包中找到。

library(scales)

ggplot(df, aes(x,y)) + 
  geom_col() +
  scale_y_continuous(limits = c(1, NA), oob = squish)

enter image description here

答案 2 :(得分:0)

如果我很了解您的问题,那么您会有多个级别的响应,并且您希望每个人都代表它。您可以考虑使用y轴离散的表示吗?

这不能避免您遇到0或1的问题,但是实际上,级别很重要。如果什么也没有,那就是因为您没有答案,所以答案是0。我不知道您是否同意我的主张:

df = data.frame(x = c('a', 'b', 'c', 'd'),
                y = factor(c(1, 2, 3, 4), levels = 1:4))


ggplot(df, aes(x, y)) + 
  geom_col() +
  scale_y_discrete(expand = expand_scale(add = 1.2))

答案 3 :(得分:0)

coord_cartesian()更改为以下内容:

coord_cartesian(ylim=c(1,5), expand=F)

以下是对ggplot()的完整调用:

ggplot(df, aes(x,y)) + 
  geom_col() + 
  coord_cartesian(ylim=c(1,5), expand=F) +
  scale_y_continuous(
    expand = expand_scale(add = c(0.2,0)))