我有以下数据框:
df = data.frame(x = c('a', 'b'),
y = c(2,4))
和相应的图形:
ggplot(df, aes(x,y)) +
geom_col()
我的比例从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)))
如您所见,y轴确实从1开始,但是现在1下方的空间被黑条填充,不再是空白。我咨询过的其他帖子都处理了y轴从0开始的情况,因此expand_scale()完成了这项工作。就我而言不是。
关于如何解决此问题的任何想法?
答案 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)
答案 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)))