R 在图形顶部显示文本(ggplot2)

R 在图形顶部显示文本(ggplot2),r,ggplot2,text,R,Ggplot2,Text,我用ggplot2软件包制作了一张热图。我想使用annotate函数在图表顶部添加一些文本。出于某种原因,文本被某些部分“覆盖”。如何显示完整标签 示例数据如下所示: data <- data.frame("group" = c("grp1", "grp2", "grp3", "grp4"), "pct" = runif(100, min = 0, max = 100)) data <- data %>% group_by(group) %>% mutat

我用
ggplot2
软件包制作了一张热图。我想使用
annotate
函数在图表顶部添加一些文本。出于某种原因,文本被某些部分“覆盖”。如何显示完整标签

示例数据如下所示:

data <- data.frame("group" = c("grp1", "grp2", "grp3", "grp4"), "pct"  = runif(100, min = 0, max = 100))

  data <- data %>%
  group_by(group) %>%
  mutate(id = row_number())
ggplot(data, aes(x=id, y=group, fill = pct)) +
  geom_tile() +
  theme_minimal() +
  annotate("text", x = 3, y = 4.7, size = 3.2,label = "Morning") +
  annotate("text", x = 7, y = 4.7, size = 3.2,label = "Afternoon") +
  annotate("text", x = 12, y = 4.7, size=  3.2, label = "Evening") +
  annotate("text", x = 17, y = 4.7, size = 3.2, label = "Night") +
  theme(plot.margin = unit(c(0.3, 0.45, 0.3, 0.45), "cm"))
图附于此。 您可以看到,上午下午晚上晚上文本无法完全显示。我尝试使用
plot.margin
命令添加边距,但没有成功。你知道怎么解决吗


谢谢

plot.margin
设置绘图外部的边距,而您需要在绘图内部留出更多空间@卡米尔有一个正确的想法:你需要扩展y轴。幸运的是,它很简单:只需将
expand
参数传递到
scale\u y\u discrete

expand
只是在轴的两侧添加了额外的空间,因此数据是离散的并不重要(不像使用
ylim
)。如果您想更详细地定义额外的空间(例如,只在顶部添加空间),将
expand\u scale
传递到
expand
参数(谢谢@camile!)可以分别在4条边上定义额外的空间。它还允许您添加绝对或相对空间量。语法有点奇怪,因此检查
?展开\u scale
以查看参数名称:

ggplot(data, aes(x=id, y=group, fill = pct)) +
    geom_tile() +
    theme_minimal() +
    annotate("text", x = 3, y = 4.7, size = 3.2,label = "Morning") +
    annotate("text", x = 7, y = 4.7, size = 3.2,label = "Afternoon") +
    annotate("text", x = 12, y = 4.7, size=  3.2, label = "Evening") +
    annotate("text", x = 17, y = 4.7, size = 3.2, label = "Night") +
    scale_y_discrete(expand = expand_scale(mult = c(0, 0.3)))

尝试扩展y比例,为注释腾出空间。另外,在提出一个容易回答的R问题时,如果你发布更多我们需要的内容(即数据)和更少我们不需要的内容(主题和样式),人们可以提供更好的帮助。谢谢你的建议!我按照你的建议编辑了我的问题。扩展y比例很难实现,因为y比例由数据集中的组数决定。只需添加:最新的
ggplot2
添加了
expand_scale
,您可以使用它通过加法和/或乘法项进行扩展,以进行更精细和直观的调整谢谢!我如何在上面添加额外的空间,而不是在上面和底部都添加空间?(我想把号码留在原来的地方)。我已经更新了答案<代码>扩展\u比例为您提供更多控制@卡米尔:谢谢你的建议!