R 如何使用匹配的手动色标创建几何图形文本和几何图形点?

R 如何使用匹配的手动色标创建几何图形文本和几何图形点?,r,ggplot2,geom-text,R,Ggplot2,Geom Text,我想创建一个绘图,其中我的标签(源自geom_text)与我用于点的手动色标相匹配。下面是一个使用Iris数据集的示例。当我输入以下代码时,会出现此错误: library(tidyverse) labels <- tibble( Species = c("setosa", "veriscolor", "virginica"), Sepal.Length = c(4.3, 5.5, 7), Sepal.Width = c(

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

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.
库(tidyverse)

标签错误不在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) )

错误不在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) )


在您的示例中,您创建的数据集中的一个因子标签拼写错误(“verginica”vs“virginica”),因此您有四个级别,而不是三个级别。为了避免拼写错误,您可以执行类似于
Species=unique(iris$Species)
的操作。您应该检查实际数据集中是否存在类似问题。如果这不是问题所在,您应该更新问题,使其更符合您的实际情况。
veriscolor
也是一个拼写错误。萼片中也不应该有空格。宽度
。我的缺点是——问题是我使用的是不连接到开放互联网的属性系统,所以我必须手动键入所有代码。我会改正的。你的例子中没有什么错,除了物种名称上的错误。更改为
c(“setosa”、“versicolor”、“virginica”)
您的示例运行得非常好。如果你的工作中出现了相同的错误信息,那么很可能你也有类似的错误信息。使用
unique()。如果问题仍然存在,请使用更具体的示例更新问题。我知道您使用的是专有数据,但请尝试模仿您拥有的数据结构,而不是使用R随附的任何数据集。@CarlosEduardoLagosta,oy,这令人尴尬。但我不能删除它。感谢您的帮助。在您的示例中,您创建的数据集中的一个因子标签拼写错误(“verginica”vs“virginica”),因此您有四个级别,而不是三个级别。为了避免拼写错误,您可以执行类似于
Species=unique(iris$Species)
的操作。您应该检查实际数据集中是否存在类似问题。如果这不是问题所在,您应该更新问题,使其更符合您的实际情况。
veriscolor
也是一个拼写错误。萼片中也不应该有空格。宽度
。我的缺点是——问题是我使用的是不连接到开放互联网的属性系统,所以我必须手动键入所有代码。我会改正的。你的例子中没有什么错,除了物种名称上的错误。更改为
c(“setosa”、“versicolor”、“virginica”)
您的示例运行得非常好。如果你的工作中出现了相同的错误信息,那么很可能你也有类似的错误信息。使用
unique()。如果问题仍然存在,请使用更具体的示例更新问题。我知道您使用的是专有数据,但请尝试模仿您拥有的数据结构,而不是使用R随附的任何数据集。@CarlosEduardoLagosta,oy,这令人尴尬。但我不能删除它。感谢您的帮助。通过全局设置
x
y
,您只需在
geom_text
层中指定
label
。谢谢,这太棒了。就我的理解而言,ggplot“考虑”我的标签集中的物种和iris集中的物种是否不同,因为一个是字符串,另一个是因子?不,问题是您在标签集中拼错了物种名称,所以ggplot将其理解为与iris数据不同的物种。通过使用
Species=levels(iris$Species)
或任何类似的方法,您只需避免键入错误。正如网站社区所指出的,由于这是一个键入错误,因此最好删除此问题,因为它对其他用户几乎没有帮助。我为造成的混乱道歉。我正在使用
iris
数据集作为示例,因为我的代码在我客户的系统上,我不能在这里上传。原始代码中没有拼写错误。通过全局设置
x
y
,您只需在
geom_text
层中指定
label
。谢谢,这太棒了。就我的理解而言,ggplot“考虑”我的标签集中的物种和iris集中的物种是否不同,因为一个是字符串,另一个是因子?不,问题是您在标签集中拼错了物种名称,所以ggplot将其理解为与iris数据不同的物种。通过使用
Species=levels(iris$Species)
或任何类似的方法,您只需避免键入错误。正如网站社区所指出的,由于这是一个键入错误,因此最好删除此问题,因为它对其他用户几乎没有帮助。我为造成的混乱道歉。我正在使用
iris
数据集作为示例,因为我的代码在我客户的系统上,我不能在这里上传。原始代码中没有拼写错误。