这可能主要是由于我误解panel.margin = unit(...)
了theme()
函数的工作原理……但是我无法按照自己想要的方式在facet_wrap中自定义边距。基本上,我想要一个facet_grid像这样,strip.text
在每个构面中都插入有构面文本(即),并且每个构面之间都没有缝隙:
(我留在粉红色的边框中显示每个构面的尺寸)
所以这是到目前为止的代码。
设置数据并绘制:
library(ggplot2)
library(grid)
p <- ggplot() +
geom_bar(data = mtcars, aes(x = cyl, y = qsec), stat = 'identity') +
facet_wrap( ~ carb, ncol = 3)
mytheme <- theme_minimal() + theme(
axis.text.x = element_blank(),
axis.text.y = element_blank(),
axis.ticks = element_blank(),
axis.title = element_blank(),
panel.margin = unit(0, "lines"),
panel.border = element_rect(colour = rgb(1.0, 0, 0, 0.5), fill=NA, size=1)
)
标准剧情
p + mytheme
完全删除strip.text
p + mytheme + theme(strip.text = element_blank())
添加strip.text并将其插入
p + mytheme +
theme(strip.text = element_text(size = rel(3.0), vjust = -4.0))
重新包含strip.text(以及增加的相对大小)会增加两行之间的垂直边距。所以在这一点上,我不知道如何缩小顶部和底部行之间的垂直间隙。
负边距太大p + mytheme +
theme(strip.text = element_text(size = rel(3.0), vjust = -4.0),
panel.margin = unit(c(-2, -2), "lines"))
那么,如何仅将两行之间的panel.margin作为目标?
编辑:其他信息。行之间的空间似乎是strip.background
:
p + mytheme +
theme(strip.text = element_text(size = rel(3.0), vjust = -4.0),
panel.margin = unit(-1, "lines"),
strip.background = element_rect(fill = rgb(0, 1.0, 0, 0.2)))
在的可能参数列表中theme()
,不仅存在panel.margin
(“小平面面板(单位)上的边距”,请参见?theme
),而且还可以方便地一次使用panel.margin.x
和panel.margin.y
分别访问其中一个轴(“水平/垂直边距”)。围绕小平面面板(单位;继承自panel.margin)”)。
因此,虽然将边距减小到零以下感觉有点像黑客,但可以使用以下方法来完成工作(您可能需要稍微调整一下值-unit(-2, "lines")
最适合我):
p + theme(strip.text = element_text(size = rel(3.0), vjust = -4.0),
panel.margin.y = unit(-2, "lines"))
如果使用strip.text = element_blank()
,则可能应该使用panel.margin.y = unit(-0.5, "lines")
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句