有人能解释手动ggplot量表中命名向量的行为吗?

时间:2016-11-04 15:41:55

标签: r ggplot2 nse

当使用命名向量在ggplot2中手动缩放设置颜色时,如果使用变量作为其中一个名称,颜色将不会出现在最终的绘图中。

library(ggplot2)

first_species <- 'setosa'
colours <- c(first_species = 'black',
             'versicolor'  = 'cadetblue',
             'virginica'   = 'hotpink')

ggplot(iris) +
  aes(x = Petal.Length, y = Petal.Width, colour = Species) +
  geom_point() +
  scale_colour_manual(values = colours)

Missing a colour

但是,如果我使用名称创建命名向量,则图表将按预期显示:

colours <- c('black', 'cadetblue', 'hotpink')
names(colours) <- c(first_species, 'versicolor', 'virginica')

ggplot(iris) +
  aes(x = Petal.Length, y = Petal.Width, colour = Species) +
  geom_point() +
  scale_colour_manual(values = colours)

Correct plot

任何人都可以向我解释这种行为吗?我怀疑它与非标准评估有关(ggplot2使用的是名称而不是值?)。

建议在手动刻度设置功能中使用变量的最佳方法,将不胜感激!

1 个答案:

答案 0 :(得分:2)

当您执行以下操作时:

c(n=1)

就像在做:

runif(n=10)

此处n是一个名称,并且不会像它是变量一样进行评估。它是一个命名参数。您可以引用runif("n"=10)之类的名称是解析器的一个功能,它允许您将其他不可解析的名称作为参数:

list("this has spaces" = 99) # works, list(this has spaces=99) fails