geom_text() 的边界位置

Bounding position for geom_text()

我正在制作多个倾斜条形图的实例。由于计数的大小和百分比的差异不同,在某些情况下,其中一个标签(计数)的一部分被推到栏外。在所有情况下,我都需要标签完全位于栏内。如果不重新定位以适合栏内,我需要标签按原样居中。

密码是:

library(tidyverse)
library(ggplot2)

data <- tibble(type = c('Cat', 'Dog'),
               group = c('Pets', 'Pets'),
               count = c(10000, 990000),
               percent = c(1, 99))

ggplot(data, aes(x = group, y = percent, fill = type)) +
  geom_bar(stat = 'identity', 
           position = position_stack(reverse = TRUE)) +
  coord_flip() +
  geom_text(aes(label = count),
            position = position_stack(vjust = 0.5, 
                                      reverse = TRUE))

这里要注意的一件事情是 ggplot 中的绘图根据图形设备分辨率、宽度和高度设置而绘制不同。这就是为什么绘图看起来会根据您用来绘制它们的计算机而有所不同的原因。如果我采用您的默认图表并保存不同的纵横比,这将变得很明显:

  • width=3, height=5

  • width=7, height=5

纵横比和分辨率改变了情节。您也可以通过调整绘图查看器的大小在 R studio 中亲自查看 window.

话虽这么说,但有一些选项可以调整您的情节,以减少文本超出范围的可能性:

  • 旋转文本或将绘图旋转回水平条。对于长文本标签,不管怎样,使用水平条会更好。

  • geom_text_repel 来自 ggrepel 包。直接替换 geom_text 将您的标签放在绘图区域中,您可以使用 min.segment.length= 指定最小行长度以及 force=direction= 来玩定位。同样,如果您向后翻转图表,效果会更好。

  • 使用应用于 scale_y_continuousexpand= 参数。例如,尝试将 scale_y_continuous(expand=c(0.25,0.25)) 添加到您的绘图中。请注意,由于您的坐标系已翻转,因此您必须指定 "y" 才能展开 "x"。这会扩大 geom 周围的绘图区域。

  • 更改输出 width=height= 以及导出绘图时的分辨率。如上所述,这是简单的解决方案。

可能还有其他建议,但这是我的建议。

使用hjust="inward":

ggplot(data, aes(x = group, y = percent, fill = type)) +
  geom_bar(stat = 'identity', position = position_stack(reverse = TRUE)) +
  coord_flip() +
  geom_text(aes(label = count), hjust = "inward", position = position_stack(vjust = 0.5, reverse = TRUE))