我希望条形图的底部轴为零,但顶部扩展了一小部分(根据某种比例).但是,我正在绘制输出,stat_summary所以我没有可用的最大值,我正在使用facet scale="free_y"所以我无法手动设置它们.否则我会使用baptiste的添加技巧geom_blank.我知道我可以读取值并手动创建一个带有上限的数据框,但是这可以设置而不必硬编码限制吗?
另一种选择是计算函数调用之外的平均值,并且只是在没有调用的情况下绘制stat_summary(这样我直接为每个方面设置了上限),但有什么方法可以解决这个问题吗?
例:
ggplot(mtcars)+
stat_summary(aes(cyl,mpg),
fun.y="mean",
geom="bar")+
scale_y_continuous(expand=c(0,0))+
facet_grid(carb~.,"free_y")
Run Code Online (Sandbox Code Playgroud) 我有一些数据共享一个共同的 x 轴,但有两个不同的 y 变量:
set.seed(42)
data = data.frame(
x = rep(2000:2004, 2),
y = c(rnorm(5, 20, 5), rnorm(5, 150, 15)),
var = rep(c("A", "B"), each = 5)
)
Run Code Online (Sandbox Code Playgroud)
我正在使用分面线图来显示数据:
p = ggplot(data, aes(x, y)) +
geom_line() +
facet_grid(var ~ ., scales = "free_y")
Run Code Online (Sandbox Code Playgroud)
我希望 y 轴包含 0。这很容易:
p + expand_limits(y = 0)
Run Code Online (Sandbox Code Playgroud)
但随后我的数据看起来过于拥挤,离我的方面的顶部太近了。所以我想填充轴的范围。通常scale_y_continuous(expand = ...)用于填充轴,但填充对称地应用于顶部和底部,使 y 轴远低于0。
p + expand_limits(y = 0) +
scale_y_continuous(expand = c(0.3, 0.2))
# the order of expand_limits and scale_y_continuous
# …Run Code Online (Sandbox Code Playgroud)