首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅在某些因素水平下为重复观测生成多条线

仅在某些因素水平下为重复观测生成多条线
EN

Stack Overflow用户
提问于 2017-03-04 02:03:54
回答 1查看 60关注 0票数 0

我正在生成用于观察的密度图。这些观察属于一个物种,其中一些也与个人ID有关。

有了下面的数据,我想为物种1和物种2的每个级别的IndID生成一行,并且只为物种3生成一行,这不包括IndID。There are related questions on SO,但不使用可重现的数据,并寻找不同的结果。

代码语言:javascript
复制
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))

在物种级别上保持禁欲的颜色,我想为物种一和物种二(绿色和红色)创建多条线,并为物种三创建一条蓝色线。

代码语言:javascript
复制
ggplot(dat, aes(Value)) + geom_density(aes(color = Species), size = 1.25) + 
  scale_colour_manual(values = c("darkgreen","blue", "red"))

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-04 02:40:23

如果您希望能够区分它们,可以将linetype设置为IndID。但是请注意,您需要将NA更改为其他值,以便(轻松地)将其绘制出来。

我还对您的数据进行了一点扩展,为每个人提供了足够的值来显示有意义的行。我还使用了geom_line(stat = "density")而不是geom_density(),因为它省略了底部的线条,并提供了带有线条而不是方框的图例。

代码语言:javascript
复制
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"))

给出

如果您希望所有行都是实线,您可以运行:

代码语言:javascript
复制
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")

(或者像@Henrik在zir评论中建议的那样使用group )

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42585629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档