有人可以在手动 ggplot 比例尺中解释命名向量的行为吗?
Can someone explain the behaviour of named vectors in manual ggplot scales?
在 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)
但是,如果我使用名称创建命名向量,则绘图会按预期显示:
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)
任何人都可以向我解释这种行为吗?我怀疑它与非标准评估有关(ggplot2 使用的是名称而不是值?)。
建议在手动比例设置函数中使用变量的最佳方式,将不胜感激!
当您执行以下操作时:
c(n=1)
就像这样:
runif(n=10)
n
在这里是一个名称,并没有像变量一样被评估。它是一个命名参数。您可以引用 runif("n"=10)
之类的名称是解析器的一项功能,它允许您将其他无法解析的名称作为参数:
list("this has spaces" = 99) # works, list(this has spaces=99) fails
正如其他人所提到的,如果您查看您创建的命名向量 colours
,您会发现它没有计算 first_species
,它只是将其指定为名称。
first_species <- 'setosa'
colours <- c(first_species = 'black',
'versicolor' = 'cadetblue',
'virginica' = 'hotpink')
colours
# first_species versicolor virginica
# "black" "cadetblue" "hotpink"
您可以通过使用 setNames
:
调用它来让 R 评估该变量
colours <- setNames(c("black", "cadetblue", "hotpink" ),
c(first_species, "versicolor", "virginica"))
colours
# setosa versicolor virginica
# "black" "cadetblue" "hotpink"
现在你得到了想要的情节:
ggplot(iris) +
aes(x = Petal.Length, y = Petal.Width, colour = Species) +
geom_point() +
scale_colour_manual(values = colours)
在 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)
但是,如果我使用名称创建命名向量,则绘图会按预期显示:
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)
任何人都可以向我解释这种行为吗?我怀疑它与非标准评估有关(ggplot2 使用的是名称而不是值?)。
建议在手动比例设置函数中使用变量的最佳方式,将不胜感激!
当您执行以下操作时:
c(n=1)
就像这样:
runif(n=10)
n
在这里是一个名称,并没有像变量一样被评估。它是一个命名参数。您可以引用 runif("n"=10)
之类的名称是解析器的一项功能,它允许您将其他无法解析的名称作为参数:
list("this has spaces" = 99) # works, list(this has spaces=99) fails
正如其他人所提到的,如果您查看您创建的命名向量 colours
,您会发现它没有计算 first_species
,它只是将其指定为名称。
first_species <- 'setosa'
colours <- c(first_species = 'black',
'versicolor' = 'cadetblue',
'virginica' = 'hotpink')
colours
# first_species versicolor virginica
# "black" "cadetblue" "hotpink"
您可以通过使用 setNames
:
colours <- setNames(c("black", "cadetblue", "hotpink" ),
c(first_species, "versicolor", "virginica"))
colours
# setosa versicolor virginica
# "black" "cadetblue" "hotpink"
现在你得到了想要的情节:
ggplot(iris) +
aes(x = Petal.Length, y = Petal.Width, colour = Species) +
geom_point() +
scale_colour_manual(values = colours)