我正在为观察生成密度图。观察属于一个物种,一些也与个体ID相关。
根据下面的数据,我想为物种一和二的每个IndID水平生成一条线,而对于物种三只生成一条线,不包括IndID。 There are related questions关于SO,但没有可重现的数据并寻找不同的结果。
library(ggplot2)
set.seed(1)
dat <- data.frame(Species = c(rep(c("One", "Two"), each = 2, length = 30), rep("Three",50)),
IndID = c(rep(letters[1:5],each = 6),rep(NA,50) ),
Value = sample(1:20, replace = T))
在物种层面上保持颜色禁欲,我想为物种一和二(绿色和红色)创建多条线,为物种三创建一条蓝线。
ggplot(dat, aes(Value)) + geom_density(aes(color = Species), size = 1.25) +
scale_colour_manual(values = c("darkgreen","blue", "red"))
答案 0 :(得分:1)
如果您希望能够区分它们,可以将linetype
设置为IndID
。但请注意,您需要将NA
更改为其他值,以便(轻松)将其更改为绘图。
我还对您的数据进行了一些扩展,以便为每个人提供足够的值来显示有意义的行。我还使用了geom_line(stat = "density")
而不是geom_density()
,因为它省略了底部的行,并使用行而不是框来提供图例。
set.seed(1)
dat <- data.frame(Species = c(rep(c("One", "Two"), each = 2, length = 60), rep("Three",50)),
IndID = c(rep(letters[1:5],each = 12),rep("NA",50) ),
Value = sample(1:20, 110, replace = T))
ggplot(dat
, aes(x = Value
, color = Species
, linetype = IndID)) +
geom_line(stat = "density"
, size = 1.25) +
scale_colour_manual(values = c("darkgreen","blue", "red"))
给出
如果您希望所有线都是实线,则可以运行:
ggplot(dat
, aes(x = Value
, color = Species
, linetype = IndID)) +
geom_line(stat = "density"
, size = 1.25) +
scale_colour_manual(values = c("darkgreen","blue", "red")) +
scale_linetype_manual(values = rep("solid", 6)) +
guides(linetype = "none")
(或使用group
作为@Henrik在zir评论中建议的