如何使用匹配的手动色标创建geom_text和geom_point?

时间:2018-06-19 19:48:14

标签: r ggplot2 geom-text

我想创建一个绘图,使我的标签(源自geom_text)与我用于点的手动色标相匹配。这是使用虹膜数据集的示例。输入以下代码时,出现此错误:

library(tidyverse)

labels <- tibble(
           Species = c("setosa", "veriscolor", "virginica"),
           Sepal.Length = c(4.3, 5.5, 7), 
           Sepal.Width = c(3.5, 2.3, 3.7))

ggplot(iris, aes(Sepal.Length, Sepal.Width)) +
  geom_point(aes(color = Species)) +
  geom_text(data = labels, 
            aes(x = Sepal.Length, 
                y = Sepal.Width, label = Species, color = Species),
            inherit.aes = F) +
  scale_color_manual(values = c("gray", "purple", "orange")    

Error: Insufficient values in manual scale. 4 needed but only 3 provided.

我已经看到这与未使用的因子水平有关,但我似乎无法在此处应用其解决方案。

1 个答案:

答案 0 :(得分:3)

错误不在ggplot中,而是在标签数据框中:

labels <-
  data.frame(
    Species = levels(iris$Species),
    Sepal.Length = c(4.3, 5.5, 7), 
    Sepal.Width = c(3.5, 2.3, 3.7) )

您也可以在全局aes中指定颜色以简化代码。在Gregor后,您无需在geom_text中指定x和y,因为它也是全局美学。

ggplot(iris, aes(Sepal.Length, Sepal.Width, color = Species)) +
  geom_point() +
  geom_text(data = labels, aes(label = Species)) +
  scale_color_manual(values = c("gray", "purple", "orange"))

enter image description here