首页 > 解决方案 > 添加独立于条形文本标签的子图编号

问题描述

我想找到一个简单的解决方案来编号子图,因为这是我工作的一个非常标准的练习。我可以通过安排图并通过例如自动添加数字来做到这一点egg::ggarrange()。但是,如果我有一个 ggplot 已经通过facet_grid()长条文本分割成多个方面,这会变得复杂且特别难看。我已经在这里问过一个类似的问题

在出版物中,我通常希望在左上角或右上角有一个带有标签的子图,例如1, 2, 3...orA, B, C,...和子图文本标签,用于描述居中于顶部的构面。标签和文本都应该相互独立。在我上面提到的问题中查看@stefan 的解决方案,标签和文本显然不是相互独立的,标签也不是左对齐的。

我想知道,是否有一个函数可以将标签像1, 2, 3...A, B, C,...左对齐放在刻面右上角的顶部,独立于(居中的)条形文本本身?那太棒了,可以为我省去很多麻烦。

我显然可以只使用一个标签,"<b>1</b> Text label"然后左对齐。但是,如果我有很长的文字,这看起来真的很难看。我想要实现的是左侧的数字标签和跨越两行的文本标签。

一个可接受的解决方案是将带状文本拆分为彼此独立的两列。这样,我可以将一个数字左对齐并在两行上居中放置一个文本标签。

标签: rggplot2labelfacet-grid

解决方案


感谢@stefan,我查看了tagger包。我发现这个tag_facets()功能有点难以使用(尤其是定位)。

但是,我注意到我已经tag_facet()从包中获得了该功能(没有 s!),egg并决定试一试。这以一种不幸的方式改变了绘图的边距并将条形文本设置为element_blank(),但这很容易恢复(@Lyngbakr 的答案中提供了类似的解决方案)。

我只是将其添加到我的情节中,并且效果很好:

egg::tag_facet(p, tag_pool = 1:5, open = "", close = "", vjust = -0.7) +
  coord_cartesian(clip = "off") +
  theme(strip.text = element_text(),
        legend.margin=margin(0,0,0,0),
        legend.box.margin=margin(-10,-10,-10,-10))

(虽然它会更直观,但这似乎不适用于该egg::tag_facet_outside()功能......)


推荐阅读