从geom_point和scale_fill_gradient向图例添加单个点

时间:2018-09-27 07:35:49

标签: r ggplot2 legend

我已经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)

enter image description here

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

2 个答案:

答案 0 :(得分:2)

要在图例中添加其他元素,必须将其添加到绘图中。您可以执行以下操作:

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

在这里,我们要在数据集中添加第一个点,并将其设置为fill和虚拟alpha值(我们需要在aes内进行设置以将其添加到图例中)。我正在使用"",所以一个点旁边不会有任何文本。
另外,将这一点添加到主geom_point之前也很重要,因为它将覆盖原始点(用白色填充)。您还需要将alpha的{​​{1}}值重置为"",并在1中为alpha设置所需的图例名称。

labs()

enter image description here


PS。我对您的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") 代码进行了一些更改:

  • 您可以在第一个ggplot2调用内指定数据和aes
  • 在geom层中,ggplot是第一个参数,数据是第二个参数。因此,而不是aes。您已使用geom_point(data = df_1, aes(...)
  • geom_point(aes(...), df_1)是默认设置-您无需指定它。

答案 1 :(得分:1)

您可以添加一个因子并使用scale_color_manual

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


library(ggplot2)
p = ggplot() +

  geom_point(data = df_1, 
             aes(x=lon, y=lat, fill = x, colour = new), 
             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_color_manual(name = "", values = "black")

print(p)

enter image description here