R:从数据框变量生成图例

时间:2016-08-16 20:32:31

标签: r

我正在尝试在R中生成一个图例,并参考以下post

我有以下MWE,它或多或少代表我正在使用的东西。数据帧a,b和c是在R脚本的过程中使用颜色生成的。 (可能会有更多,因为这些组是由循环生成的)

a <- density(rnorm(100,mean = 5, sd = 1))
b <- density(rnorm(100,mean = 10, sd = 1))
c <- density(rnorm(100,mean = 7, sd = 1))
plot(c,col = "#FFCC00FF")
lines(b, col = "#FF6600FF")
lines(a, col = "#FF0000FF")
legendDataFrame <- data.frame(Group = c("A","B","C"), Colour = c("#FF0000FF","#FF6600FF", "#FFCC00FF"))
legend("topleft",legend=unique(legendDataFrame$Group), pch=1, col=unique(legendDataFrame$Colour))
print(legendDataFrame)

但是,我得到这样的图像,颜色不正确..建议?

enter image description here

2 个答案:

答案 0 :(得分:4)

试试这个:

legendDataFrame <- data.frame(stringsAsFactors=FALSE, Group = c("A","B","C"), Colour = c("#FF0000FF","#FF6600FF", "#FFCC00FF"))

P.S。 我在data.frame(stringsAsFactors=TRUE)至少1000次砸了我的头。我和我在一起很好:

http://r.789695.n4.nabble.com/stringsAsFactors-FALSE-td921891.html
http://simplystatistics.org/2015/07/24/stringsasfactors-an-unauthorized-biography/
http://adv-r.had.co.nz/Data-structures.html

答案 1 :(得分:1)

如果您想维护动态函数,也可以尝试使用

,而不是明确列出颜色
legend("topleft",
    legend=unique(legendDataFrame$Group),
    pch=1,
    col=as.vector(unique(legendDataFrame$Colour)))

添加as.vector可将因子(unique(legendDataFrame$Colour))转换为矢量。