我正在尝试使用ggplot来制作一个简单的场地图。现场设计采用以下格式:
design <- data.frame(Genotype=rep(LETTERS[1:4], 4), Status=rep(c("P","N"), each=8),
Density=rep(c(40,80), each=4),
Row=rep(seq(1:4)),
Range=rep(1:4, each=4))
我希望地图的填充映射到Genotype
,其他东西(理想情况下是亮度)映射到Density
。我最接近的是使用alpha
,但它并不理想,因为它从非常低的alpha变为非常高。在非常低的alpha下,很难看出填充是什么。
这是我目前情节的代码:
d.p <- ggplot(design, aes(Row, Range))
d.p1 <- d.p + geom_tile(aes(fill=Genotype, alpha=Density))
我已经摆弄scale_fill_hue
,但似乎无法做出任何明智的事情。
提前致谢。
修改
对不起,我意识到当我制作上面修复过的可重现的例子时,我遗漏了现实世界问题的一个基本方面。
如下所述,alpha
可以映射到密度,但我还需要区分Status
。孵化似乎是一个明显的解决方案,但我知道这不是一个选择。我可以手动指定相似的颜色(浅蓝色,深蓝色等),但我真的希望能够自动化这个,以便我可以为任何现场设计。
任何想法都表示赞赏,并对此感到抱歉!
答案 0 :(得分:4)
我会忽略Row
和Genotype
包含冗余信息的事实,并提供此信息:
ggplot(design,aes(x = Row,y = Range)) +
geom_tile(fill = "transparent",colour = "black") +
geom_point(aes(colour = Genotype,size = factor(Density),shape = Status)) +
scale_size_manual(values = c(3,6))
但有些事情告诉我,你也有理由不能这样做。