【问题标题】:How can I add an extra symbol in legend of a ggplot graph?如何在 ggplot 图的图例中添加额外的符号?
【发布时间】:2020-08-22 08:43:54
【问题描述】:

我想在 ggplot 图的图例中添加一个符号。 ggplot的符号代码如下图,我的问题是,怎么画出图中圈出的那个(*)符号?

  library(ggplot2 )
ToothGrowth$dose <- as.factor(ToothGrowth$dose)
p <- ggplot(ToothGrowth, aes(x=dose, y=len, fill=dose)) + 
  geom_boxplot()
p

【问题讨论】:

  • 棘手。将剂量 1 组的标签更改为 1**1 会更容易。这可以接受吗?否则,除非您想做 非常 深度的图形黑客,否则我会尝试导出为 PDF 或 SVG 并在 Illustrator 或 Inkscape 或 ...
  • 从 ggplot2_3.2.0 开始,您可以使用 geom_*() 中的 key_glyph 参数选择要在图例键中显示的字形。有关当前可用字形的列表,请参阅 ?draw_keykey_glyph 参数采用关键绘图功能。您必须自己编写 --- 基于 draw_key_boxplot --- 才能得到您想要的。我从来没有这样做过。正如@BenBolker 所说,这很棘手。

标签: r ggplot2


【解决方案1】:

这需要一些手动调整才能正确定位,但您可以使用annotatecoord_cartesianclip = off 在绘图之外添加符号作为注释。一些提示来自this 答案。

ToothGrowth$dose <- as.factor(ToothGrowth$dose)

p <- ggplot(ToothGrowth, aes(x=dose, y=len, fill=dose)) + 
  geom_boxplot() +
  annotate("point", x = 3.66, y = 18.5, shape = 8, size = 2) +
  coord_cartesian(xlim = c(1, 3), clip = "off")

ggsave('test.jpg', p)


编辑:如果有重叠,上述答案中的形状将被图例隐藏。使用tag 是一个类似的解决方案,但允许将符号绘制在图例的顶部。它仍然需要一些手动调整,但坐标是相对于图形而不是数据的位置(这似乎是一个好处)。

ToothGrowth$dose <- as.factor(ToothGrowth$dose)

p <- ggplot(ToothGrowth, aes(x=dose, y=len, fill=dose)) + 
  geom_boxplot() +
  labs(tag = '*') +
  theme(plot.tag.position = c(.94, 0.5),
        plot.tag = element_text(size = 30))

ggsave('test.jpg', p)

【讨论】:

  • 不错(如果易碎)
  • 正如您在评论中提到的,将标签更改为 1 * 将是一种更可靠的处理方式。
  • 并不是说我没有做过这样的事情,但是当上游发生某些变化并且手动调整的间距最终出错时,我经常会感到沮丧......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多