R语言 如何使用ggplot在图例框中绘制箭头

x4shl7ld  于 2023-04-09  发布在  其他
关注(0)|答案(2)|浏览(255)

我想在图的框外添加一个箭头,替换梯度缩放图例中的值。通过这样做,我希望更容易理解我的图例。一些玩具数据:

library(tidyverse)

set.seed(27)

df <- data.frame(food =  c("apple","meat","rice","beans","sandwich","potato","bublegum","candy","pasta","grape",                 "lemon","orange"),
                 tastefullness_according_to_kids =  c("03","06","02","10","05","12","01","04","08","07","11","09"),
                 votes = sample.int(50, 12))

df$tastefullness_according_to_kids <- as.numeric(df$tastefullness_according_to_kids)

这是我迄今为止所尝试的:

ggplot(data=df,aes(x=food, y=votes, fill = tastefullness_according_to_kids))+
  geom_bar(stat = "identity")+
  scale_fill_gradient(low= "#000000", high="#FF0000", labels=NULL)+
  xlab(expression(symbol('\255')))+
  theme(axis.title.x = element_text(size=30))

这里我的问题是,虽然我成功地在x轴(甚至在y轴)插入了一个箭头,但我无法将其插入图例中,靠近填充比例。我想完成的是:

我也尝试了与上面相同的代码,但将“xlab”替换为“labs”,以便在图例旁边插入我的箭头,但它没有工作。
有人能帮我吗?谢谢。

rvpgvaaj

rvpgvaaj1#

一个简单的方法是使用cowplot提取图例,通过annotation_custom添加箭头,然后通过patchwork将其粘回主图:

library(ggplot2)
library(cowplot)
library(grid)

p <- ggplot(data = df, aes(
  x = food, y = votes,
  fill = tastefullness_according_to_kids
)) +
  geom_bar(stat = "identity") +
  scale_fill_gradient(low = "#000000", high = "#FF0000", labels = NULL) +
  theme(axis.title.x = element_text(size = 30))

legend <- cowplot::get_legend(p) |> cowplot::ggdraw()

legend <- legend + annotation_custom(
  grob = grid::textGrob(expression(symbol("\255")),
    gp = grid::gpar(fontsize = 50),
    x = unit(.325, "npc"),
    y = unit(.475, "npc")
  )
)

p <- p + guides(fill = "none")

library(patchwork)

p + legend +
  plot_layout(widths = c(8, 2))

8ulbf1ek

8ulbf1ek2#

我们可以将填充图例中的默认分隔符/标签替换为箭头所需位置的单个分隔符(我使用6.5),并提供一个unicode箭头作为标签。之后,隐藏图例中的刻度并调整箭头的字体大小以满足您的需求:

ggplot(data=df,
       aes(x=food, y=votes, fill = tastefullness_according_to_kids))+
  geom_col() +
  scale_fill_gradient(name = "Tastefulness\naccording\nto kids",
                      low= "#000000", high="#FF0000", 
                      breaks = 6.5, labels = "\u2191",
                      guide = guide_colorbar(label.theme = element_text(size = 50),
                                             ticks = FALSE))+
  theme(axis.title.x = element_text(size=30))

相关问题