首页 > 解决方案 > 从 geom_point 和 scale_fill_gradient 向图例添加一个点

问题描述

我已经工作了几个月,ggplot2但我仍然很容易在基本的事情上陷入困境,因为这里的选择几乎是无限的。

假设我创建了一个简单的绘图,如下所示:

set.seed(100)
df_1 = data.frame(lat = rnorm(20), 
                  lon = rnorm(20), 
                  x = rnorm(20))


library(ggplot2)
p = ggplot() +

    geom_point(data = df_1, 
           aes(x=lon, y=lat, fill = x), 
           size = 5, colour = 'black', pch = 21) +

    scale_fill_gradient2(low = "green", mid = 'white', high = "yellow",
                         breaks = c(-1, 0, 1), 
                         labels = c('-1', '0', '1'),
                         limits = c(-1,1))

print(p)

在此处输入图像描述

如何添加第二个带有标题(例如 y)的图例,仅显示其中一个具有白色背景和黑色轮廓的圆圈?

标签: rggplot2legend

解决方案


要将额外元素添加到图例中,您必须将其添加到绘图中。你可以这样做:

geom_point(aes(alpha = ""), head(df_1, 1),
           size = 5, fill = "white", pch = 21) +

在这里,我们在您的数据集中添加第一个点,设置它fill和虚拟alpha值(我们需要在其中设置一些内容aes以将其添加到图例中)。我正在使用"",所以我们不会在一个点旁边有任何文字。
此外,在 main 之前添加这一点很重要,geom_point因为它将覆盖原始点(使用白色填充)。您还需要从 to 重置值alpha并为in设置想要的图例名称。""1alphalabs()

library(ggplot2)
ggplot(df_1, aes(lon, lat, fill = x)) +
    geom_point(aes(alpha = ""), head(df_1, 1),
               size = 5, fill = "white", pch = 21) +
    geom_point(size = 5, pch = 21) +
    scale_fill_gradient2(low = "green", mid = "white", high = "yellow",
                         breaks = c(-1, 0, 1), 
                         labels = c("-1", "0", "1"),
                         limits = c(-1, 1)) +
    scale_alpha_manual(values = 1) +
    labs(alpha = "y")

在此处输入图像描述


PS。我对您的ggplot2代码进行了一些更改:

  • aes您可以在第一次ggplot通话 中指定数据和。
  • 在 geom 图层aes中是第一个参数,数据是第二个。所以代替geom_point(data = df_1, aes(...). 你有用geom_point(aes(...), df_1)
  • color = "black"是默认设置 - 您无需指定它。

推荐阅读