我正在尝试在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)
但是,我得到这样的图像,颜色不正确..建议?
答案 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)
)转换为矢量。