首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除绘制的数据和轴之间的空间。

删除绘制的数据和轴之间的空间。
EN

Stack Overflow用户
提问于 2014-04-08 18:44:39
回答 3查看 134.6K关注 0票数 155

我有以下数据:

代码语言:javascript
复制
uniq <- structure(list(year = c(1986L, 1987L, 1991L, 1992L, 1993L, 1994L, 1995L, 1996L, 1997L, 1998L, 1999L, 2000L, 2001L, 2002L, 2003L, 2004L, 2005L, 2006L, 2007L, 2008L, 2009L, 2010L, 2011L, 2012L, 2013L, 2014L, 1986L, 1987L, 1991L, 1992L, 1993L, 1994L, 1995L, 1996L, 1997L, 1998L, 1999L, 2000L, 2001L, 2002L, 2003L, 2004L, 2005L, 2006L, 2007L, 2008L, 2009L, 2010L, 2011L, 2012L, 2013L, 2014L, 1986L, 1987L, 1991L, 1992L, 1993L, 1994L, 1995L, 1996L, 1997L, 1998L, 1999L, 2000L, 2001L, 2002L, 2003L, 2004L, 2005L, 2006L, 2007L, 2008L, 2009L, 2010L, 2011L, 2012L, 2013L, 2014L), uniq.loc = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("u.1", "u.2", "u.3"), class = "factor"), uniq.n = c(1, 1, 1, 2, 5, 4, 2, 16, 16, 10, 15, 14, 8, 12, 20, 11, 17, 30, 17, 21, 22, 19, 34, 44, 56, 11, 0, 0, 3, 3, 7, 17, 12, 21, 18, 10, 12, 9, 7, 11, 25, 14, 11, 17, 12, 24, 59, 17, 36, 50, 59, 12, 0, 0, 0, 1, 4, 6, 3, 3, 9, 3, 4, 2, 5, 2, 12, 6, 8, 8, 3, 2, 9, 5, 20, 7, 10, 8), uniq.p = c(100, 100, 25, 33.3, 31.2, 14.8, 11.8, 40, 37.2, 43.5, 48.4, 56, 40, 48, 35.1, 35.5, 47.2, 54.5, 53.1, 44.7, 24.4, 46.3, 37.8, 43.6, 44.8, 35.5, 0, 0, 75, 50, 43.8, 63, 70.6, 52.5, 41.9, 43.5, 38.7, 36, 35, 44, 43.9, 45.2, 30.6, 30.9, 37.5, 51.1, 65.6, 41.5, 40, 49.5, 47.2, 38.7, 0, 0, 0, 16.7, 25, 22.2, 17.6, 7.5, 20.9, 13, 12.9, 8, 25, 8, 21.1, 19.4, 22.2, 14.5, 9.4, 4.3, 10, 12.2, 22.2, 6.9, 8, 25.8)), .Names = c("year", "uniq.loc", "uniq.n", "uniq.p"), class = "data.frame", row.names = c(NA, -78L))

当我制作一个区域地块时:

代码语言:javascript
复制
ggplot(data = uniq) + 
  geom_area(aes(x = year, y = uniq.p, fill = uniq.loc), stat = "identity", position = "stack") +
  scale_x_continuous(limits=c(1986,2014)) +
  scale_y_continuous(limits=c(0,101)) +
  theme_bw()

我得到了这个结果:

但是,我想移除轴线和实际图形之间的空间。当我添加theme(panel.grid = element_blank(), panel.margin = unit(-0.8, "lines"))时,会收到以下错误消息:

主题中的错误(panel.grid= element_blank(),panel.margin = unit(-0.8,:未能找到函数"unit“)

对于如何解决这个问题,有什么建议吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-04-08 18:55:58

更新:参见@divibisan的答复以获得最新版本的ggplot2中的更多可能性。

来自?scale_x_continuous关于expand-argument的报道:

用于在数据周围添加一些填充的范围扩展常数的向量,以确保它们被放置在离轴有一定距离的地方。对于连续变量,缺省值将在每侧扩展5%,对于离散变量,每侧扩展0.6个单位。

因此,通过将expand = c(0,0)添加到scale_x_continuousscale_y_continuous中,可以解决这个问题。这也消除了添加panel.margin参数的需要。

守则:

代码语言:javascript
复制
ggplot(data = uniq) + 
  geom_area(aes(x = year, y = uniq.p, fill = uniq.loc), stat = "identity", position = "stack") +
  scale_x_continuous(limits = c(1986,2014), expand = c(0, 0)) +
  scale_y_continuous(limits = c(0,101), expand = c(0, 0)) +
  theme_bw() +
  theme(panel.grid = element_blank(),
        panel.border = element_blank())

结果:

票数 243
EN

Stack Overflow用户

发布于 2018-09-13 17:25:14

ggplot2 version 3中,有一个expand_scale()函数可以传递给expand=参数,它允许您为缩放的每一方指定不同的展开值。

ggplot2 version 3.3.0而言,expand_scale()已经被反对,转而支持功能相同的expansion

它还允许您选择展开为绝对大小(使用add=参数)还是图大小的百分比(使用mult=参数):

代码语言:javascript
复制
ggplot(data = uniq) + 
  geom_area(aes(x = year, y = uniq.p, fill = uniq.loc), stat = "identity", position = "stack") +
  scale_x_continuous(limits = c(1986,2014), expand = c(0, 0)) +
  scale_y_continuous(limits = c(0,101), expand = expansion(mult = c(0, .1))) +
  theme_bw()

由于这是我投票最多的答案,我想我应该扩展这个问题,以更好地说明add=mult=之间的区别。这两个选项都扩展了数据之外的特定数量的绘图区域。使用add,将面积扩展一个绝对数量(以该轴所用的单位表示),而mult则将该区域扩展到该轴的总大小的指定比例。

在下面的示例中,我使用add=10扩展底部,它将地块面积向下扩展10个单元到-10个单元。我使用mult=.15计算顶部,它扩展到绘图区域的顶部,占y轴上数据总量的15%。由于数据从0到100,也就是0.15 *100= 15单位,所以它最多可以扩展到115单位。

代码语言:javascript
复制
ggplot(data = uniq) + 
    geom_area(aes(x = year, y = uniq.p, fill = uniq.loc),
              stat = "identity", position = "stack") +
    scale_x_continuous(limits = c(1986,2014), expand = c(0, 0)) +
    scale_y_continuous(limits = c(0,101),
                       breaks = seq(-10, 115, by=15),
                       expand = expansion(mult = c(0, .15),
                                          add = c(10, 0))) +
    theme_bw()

票数 81
EN

Stack Overflow用户

发布于 2015-07-30 06:59:39

产生相同结果的另一个选项是使用coord_cartesian而不是连续的位置标度(x & y):

代码语言:javascript
复制
ggplot(data = uniq) +  
  geom_area(aes(x = year, y = uniq.p, fill = uniq.loc), stat = "identity", position = "stack") +  
  coord_cartesian(xlim = c(1986,2014), ylim = c(0,101))+
  theme_bw() + theme(panel.grid=element_blank(), panel.border=element_blank())
票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22945651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档