R:ensuring 图例颜色与定义的颜色匹配
R:ensuring legend colors match the defined colors
我正在使用 R 编程语言。使用著名的 Iris 数据集,我创建了以下图:
require(MASS)
cols = c('red', 'green', 'blue')
parcoord(iris[ ,-5], col = cols[iris$Species])
从这里开始,我尝试添加一个图例:
legend("topright", c("setosa", "versicolor", "virginica"), lwd = 2, col = iris$Species, bty = "n")
如何确保图例颜色与图表上的颜色实际匹配? R 会自动执行此操作吗?
谢谢
这里,iris
的Species
列是一个因子(试试运行宁class(iris$Species)
)。如果你然后 运行 levels(iris$Species)
,你会看到级别的顺序是 setosa versicolor virginica
.
如果将此因子转换为整数值(尝试 as.integer(iris$Species)
),您将看到 setosa
= 1、versicolor
= 2 和 virginica
= 3. 当您将 cols[iris$Species]
作为参数传递给 parcoord()
时,您正在使用该因子作为索引,R 会自动将其转换为整数向量。因此,setosa
将映射到 cols
的第一个元素,即 'red'
,依此类推。
请看下面:
require(MASS)
cols = c('red', 'green', 'blue')
parcoord(iris[ ,-5], col = cols[iris$Species])
legend("topright", levels(iris$Species), lwd = 2, col = cols, inset = 0.05)
这将产生以下情节:
虽然基本 R 图形可能足以满足您的用例,但我强烈建议探索 ggplot2
包以获得更高级和可自定义的图形。
iris$Species
是一个具有 3 个(整数)级别和关联名称的因子:
require(MASS)
str(iris$Species)
#> Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
因此,使用 cols[iris$Species]
根据因子水平分配颜色,setosa 是第一个(红色),依此类推。
您可以重新调整因子,这会影响颜色与物种的关联并更改颜色(setosa 为 2,因此为绿色),以证明此效果:
iris$Species <- relevel(iris$Species, "versicolor")
str(iris$Species)
#> Factor w/ 3 levels "versicolor","setosa",..: 2 2 2 2 2 2 2 2 2 2 ...
图例仅显示 3 个名称和颜色,因此您可以使用因子水平和相关名称来确保它们匹配。由于我们在这里更改了顺序,因此我们得到了:
require(MASS)
cols = c('red', 'green', 'blue')
iris$Species <- relevel(iris$Species, "versicolor")
parcoord(iris[ ,-5], col = cols[iris$Species])
legend("top", levels(iris$Species), lwd = 2, col = cols, bty = "n")
由 reprex package (v0.3.0)
于 2021 年 1 月 22 日创建
我正在使用 R 编程语言。使用著名的 Iris 数据集,我创建了以下图:
require(MASS)
cols = c('red', 'green', 'blue')
parcoord(iris[ ,-5], col = cols[iris$Species])
从这里开始,我尝试添加一个图例:
legend("topright", c("setosa", "versicolor", "virginica"), lwd = 2, col = iris$Species, bty = "n")
如何确保图例颜色与图表上的颜色实际匹配? R 会自动执行此操作吗?
谢谢
这里,iris
的Species
列是一个因子(试试运行宁class(iris$Species)
)。如果你然后 运行 levels(iris$Species)
,你会看到级别的顺序是 setosa versicolor virginica
.
如果将此因子转换为整数值(尝试 as.integer(iris$Species)
),您将看到 setosa
= 1、versicolor
= 2 和 virginica
= 3. 当您将 cols[iris$Species]
作为参数传递给 parcoord()
时,您正在使用该因子作为索引,R 会自动将其转换为整数向量。因此,setosa
将映射到 cols
的第一个元素,即 'red'
,依此类推。
请看下面:
require(MASS)
cols = c('red', 'green', 'blue')
parcoord(iris[ ,-5], col = cols[iris$Species])
legend("topright", levels(iris$Species), lwd = 2, col = cols, inset = 0.05)
这将产生以下情节:
虽然基本 R 图形可能足以满足您的用例,但我强烈建议探索 ggplot2
包以获得更高级和可自定义的图形。
iris$Species
是一个具有 3 个(整数)级别和关联名称的因子:
require(MASS)
str(iris$Species)
#> Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
因此,使用 cols[iris$Species]
根据因子水平分配颜色,setosa 是第一个(红色),依此类推。
您可以重新调整因子,这会影响颜色与物种的关联并更改颜色(setosa 为 2,因此为绿色),以证明此效果:
iris$Species <- relevel(iris$Species, "versicolor")
str(iris$Species)
#> Factor w/ 3 levels "versicolor","setosa",..: 2 2 2 2 2 2 2 2 2 2 ...
图例仅显示 3 个名称和颜色,因此您可以使用因子水平和相关名称来确保它们匹配。由于我们在这里更改了顺序,因此我们得到了:
require(MASS)
cols = c('red', 'green', 'blue')
iris$Species <- relevel(iris$Species, "versicolor")
parcoord(iris[ ,-5], col = cols[iris$Species])
legend("top", levels(iris$Species), lwd = 2, col = cols, bty = "n")
由 reprex package (v0.3.0)
于 2021 年 1 月 22 日创建