当前位置:  开发笔记 > 编程语言 > 正文

ggplot轴限制的不对称扩展

如何解决《ggplot轴限制的不对称扩展》经验,为你挑选了2个好方法。

如何在ggplot中不对称地调整限制的扩展?例如,

library(ggplot2)

ggplot(mtcars) + 
  geom_bar(aes(x = cyl), width = 1)

在此输入图像描述

我希望条形图的底部与面板背景的底部齐平,但仍然需要顶部的空间.我可以使用空白注释来实现此目的:

ggplot(mtcars) + 
  geom_bar(aes(x = cyl), width = 1) +
  annotate("blank", x = 4, y = 16) +
  scale_y_continuous(expand = c(0.0,0)) 

在此输入图像描述

ggplot但是,在以前的版本中,我可以使用Rosen Matev提供的解决方案:

library("scales")
scale_dimension.custom_expand <- function(scale, expand = ggplot2:::scale_expand(scale)) {
  expand_range(ggplot2:::scale_limits(scale), expand[[1]], expand[[2]])
}

scale_y_continuous <- function(...) {
  s <- ggplot2::scale_y_continuous(...)
  class(s) <- c('custom_expand', class(s))
  s
}

然后使用scale_y_continuous(expand = list(c(0,0.1), c(0,0)))会在图表顶部添加一致的附加内容.但是,在当前版本中,我收到错误

ggplot(mtcars) + 
  geom_bar(aes(x = cyl), width = 1) +
  scale_y_continuous(expand = list(c(0,0.1), c(0,0)))

# Error in diff(range) * mul : non-numeric argument to binary operator

ggplot2 2.0有效吗?

解决方案应该包括灵活地使用构面和free_xy缩放选项的能力.例如,

ggplot(mtcars) + 
  geom_bar(aes(x = cyl, fill = factor(vs)), width = 1) + 
  facet_grid(vs ~ ., scales = "free_y")

在此输入图像描述

解决方案应该提供如下内容:

ggplot(mtcars) + 
  geom_bar(aes(x = cyl, fill = factor(vs)), width = 1) + 
  facet_grid(vs ~ ., scales = "free_y") + 
  scale_y_continuous(expand = c(0,0)) + 
  geom_blank(data = data.frame(cyl = c(5,5), y = c(12, 16), vs = c(1,0)), aes(x = cyl, y = y))

在此输入图像描述



1> Tung..:

ggplot2 v3.0.02018年7月发布的expand_scale()选项(w/multargument)可以实现OP的目标

library(ggplot2)

ggplot(mtcars) + 
  geom_bar(aes(x = cyl, fill = factor(vs)), width = 1) + 
  facet_grid(vs ~ ., scales = "free_y") + 
  scale_y_continuous(expand = expansion(mult = c(0, .2))) 

在此输入图像描述


+1为我节省了将虚拟数据帧添加到我的情节以手动更改所有轴所需的小时数......想想我过去用过的所有时间!

2> Karl Ove Huf..:

我现在尝试为此添加代码ggplot2; 请参阅问题#1669和相应的拉取请求.如果它被接受,则expand参数的语法将从更改c(m, a)c(m_lower, a_lower, m_uppper, a_upper),用于为较低和较高范围限制指定单独的扩展值.(旧的语法仍将继续工作,因为如果缺少元素3和/或4,前两个元素将被重用.)

使用这种新语法,您可以使用

ggplot(mtcars) +
  geom_bar(aes(x = cyl), width = 1) +
  scale_y_continuous(expand = c(0, 0, 0.05, 0))

结果如下:

简单的条形图

它也适用于facetting:

ggplot(mtcars) +
  geom_bar(aes(x = cyl, fill = factor(vs)), width = 1) +
  facet_grid(vs ~ ., scales = "free_y") +
  scale_y_continuous(expand = c(0, 0, 0.05, 0))

条形图与facetting


实施发生了什么?
推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有