【问题标题】:Adding index to points in ggplot为ggplot中的点添加索引
【发布时间】:2018-07-29 21:26:22
【问题描述】:

我有一个基本情节,上面有少量点。我想用数字索引标记点,然后在图例中对点进行完整描述。这些在地图上很常见,如下例所示:

但是,ggplot 中似乎没有内置函数来添加索引。这是基本概念的 MWE:

df <- data.frame(x = 6:10, y = 6:10, id = 1:5)
df$label <- paste0("Label", df$id)

library(ggplot)

# Basic plot
ggplot(df, aes(x, y)) +
  geom_point() +
  geom_label(aes(label = id), nudge_x = 0.2)

到目前为止,我尝试的是通过美学将索引标签映射到点。这样,它会创建如下图例:

ggplot(df, aes(x, y)) +
  geom_point(aes(fill = label)) +
  geom_label(aes(label = id), nudge_x = 0.2)

这已接近正确的索引,但理想情况下,图例形状将显示数字计数而不是相同的形状。这是对潜在最终结果的手动编辑:

有没有人知道如何以优雅的方式做到这一点?

之前有一个未回答的问题与此类似:Add numbers to ggplot legend

【问题讨论】:

  • 进一步搜索后,我意识到这个问题是重复的。与往常一样,我只是使用了错误的搜索词:stackoverflow.com/questions/24801987/…
  • 虽然我仍然觉得应该有更好的方法来做这件事,因为在制作地图时有一个索引是很常见的事情!

标签: r ggplot2


【解决方案1】:

我对这个问题的最佳解决方法:

  1. 在连接 ID 和标签的原始数据集中创建一个新列
  2. 使用新列作为图例的美学
  3. 隐藏图例键

这是代码:

df$legend <- paste0(df$id,": ",df$label)

ggplot(df, aes(x, y)) +
  geom_point(aes(fill = legend), alpha = 0) +
  geom_point() +
  geom_label(aes(label = id), nudge_x = 0.2) +
  scale_fill_discrete(name = "Index") +
  theme(legend.key = element_blank(),
        legend.key.width = unit(0, "cm"),
        legend.title.align=0.5)

虽然很想听听其他方法,但还是觉得有点乱。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-13
    • 2017-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-19
    相关资源
    最近更新 更多