使用 ggplot2 的线图,手动 line/fill 颜色独立于群体审美

Line plot using ggplot2 with manual line/fill color independent of group aesthetic

我正在尝试使用 ggplot2 在折线图中以不同颜色绘制来自两个独立研究的数据。该数据来自两项使用组内设计的独立研究(同一家庭中的多个兄弟姐妹,但每个兄弟姐妹都在不同的治疗组中)。因此,我使用 "group" 美学来按家庭对个人进行分组,从而在同一家庭内的个人之间划清界限。这部分效果很好,现在我想要的是在两个单独的研究中收集的数据以不同的颜色表示。我玩了很多,手动更改颜色等,但我无法让它工作。我在网上看到的关于手动更改线条颜色的所有内容都取决于 "group" 美学,在这种情况下我需要颜色和组相互独立。

数据为长格式,以Study为因子。然后我使用了 summarySEwithin 函数,它来自 R-cookbook 的绘图方法代码(在此处可用:http://www.cookbook-r.com/Graphs/Plotting_means_and_error_bars_%28ggplot2%29/)来构建下面复制的数据框。

Similarity90SUM<- summarySEwithin(Day90, measurevar="Similarity", betweenvars=c("Condition","Study"),withinvars=c("Family"), idvar="Male_Num",na.rm=TRUE)

然后我使用 ggplot 构建了线图。除了用不同的颜色绘制来自两项研究的数据之外,这段代码可以完成我想要的一切。

ggplot(Similarity90SUM, aes(x=Condition, y=Similarity, group=Family),colour=Study) +
  geom_line() +
  geom_point(shape=19, size=2)+
  scale_colour_manual(values=c("blue","darkgreen"))

不幸的是,图中的所有线条都是黑色的,而不是蓝色和绿色(抱歉,我无法 post 图片)。

我认为问题源于用于组和颜色的变量不同这一事实,因为如果我在 aes() 中包含 colour=Study,则会收到错误消息:"Error: Aesthetics must either be length one, or the same length as the dataProblems:Condition, Similarity, Family"。任何的意见都将会有帮助!我确信有一些我只是不知道的相对简单的解决方法。提前谢谢!

dput(Similarity90SUM)

structure(list(Condition= structure(c(2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("Control", 
"AVT", "MC"), class = "factor"), Study = structure(c(1L, 1L, 
1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 
2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L
), .Label = c("Study 1", "Study 2"), class = "factor"), Family = structure(c(7L, 
19L, 20L, 21L, 1L, 4L, 5L, 8L, 12L, 17L, 3L, 6L, 18L, 19L, 22L, 
1L, 4L, 5L, 8L, 12L, 17L, 6L, 7L, 10L, 13L, 14L, 18L, 19L, 20L, 
1L, 4L, 5L, 12L, 17L), .Label = c("1", "150-2", "150-8", "2", 
"3", "34-4", "34-8", "4", "48-1", "48-2", "48-6", "5", "54-1", 
"54-5", "54-8", "6", "7", "79-2", "79-4", "87-4", "87-6", "87-8"
), class = "factor"), N = c(1, 1, 1, 1, 10, 9, 10, 10, 10, 4, 
1, 1, 1, 2, 1, 10, 4, 7, 7, 10, 10, 1, 1, 1, 1, 1, 1, 1, 1, 9, 
10, 10, 10, 9), Similarity = c(73, 89, 80, 91, 93.3, 80.3333333333333, 
46.1, 90.4, 81, 86.25, 62, 74, 75, 76.5, 66, 83.9, 79.75, 92.1428571428571, 
68.7142857142857, 47.9, 91.2, 61, 76, 52, 41, 47, 60, 78, 61, 
64.8888888888889, 49.1, 26.4, 44.3, 75), Similarity_norm = c(69.1437125748503, 
69.1437125748503, 69.1437125748503, 69.1437125748503, 69.1437125748503, 
69.1437125748503, 69.1437125748503, 69.1437125748503, 69.1437125748503, 
69.1437125748503, 69.1437125748503, 69.1437125748503, 69.1437125748503, 
69.1437125748503, 69.1437125748503, 69.1437125748503, 69.1437125748503, 
69.1437125748503, 69.1437125748503, 69.1437125748503, 69.1437125748503, 
69.1437125748503, 69.1437125748503, 69.1437125748503, 69.1437125748503, 
69.1437125748503, 69.1437125748503, 69.1437125748503, 69.1437125748503, 
69.1437125748503, 69.1437125748503, 69.1437125748503, 69.1437125748503, 
69.1437125748503), sd = c(NA, NA, NA, NA, 2.68860027311079, 5.29375193259087, 
8.29349206197309, 3.34980059423901, 5.68856645911677, 4.12599194422499, 
NA, NA, NA, 0, NA, 4.13515065015422, 4.37253331823185, 4.63154911077632, 
5.5344724669591, 4.58880625622207, 3.47264441877645, NA, NA, 
NA, NA, NA, NA, NA, NA, 10.5806302009727, 0.896200091036931, 
7.30470602822113, 12.0629302291892, 3.02765035409749), se = c(NA, 
NA, NA, NA, 0.850210058078086, 1.76458397753029, 2.62263246723613, 
1.05929995851808, 1.79888266320481, 2.0629959721125, NA, NA, 
NA, 0, NA, 1.30764945224135, 2.18626665911592, 1.75056101887093, 
2.09183396935827, 1.4511079510892, 1.09814658672052, NA, NA, 
NA, NA, NA, NA, NA, NA, 3.52687673365756, 0.283403352692695, 
2.3099508687141, 3.81463347799347, 1.00921678469916), ci = c(NA, 
NA, NA, NA, 1.92330877276442, 4.06913794909986, 5.93280682114534, 
2.39630298871351, 4.06935530160228, 6.56537390926458, NA, NA, 
NA, 0, NA, 2.95810857481691, 6.95767625166843, 4.28346850322768, 
5.11853333025038, 3.28263424554985, 2.48418016695222, NA, NA, 
NA, NA, NA, NA, NA, NA, 8.13299233216971, 0.641102924254807, 
5.22547190337353, 8.62930044569276, 2.32725807883372)), .Names = c("Condition", 
"Study", "Family", "N", "Similarity", "Similarity_norm", "sd", 
"se", "ci"), row.names = c(NA, -34L), class = "data.frame")

这是您需要做的,我假设您比较的是相似度(y 轴)与治疗(x 轴)。 正如@Gregor 所说,您需要在 aes 调用中传递 color = study

您可以在 ggplot 调用或 geom_line() 层调用中传递它 通过颜色 = 在 ggplot 调用的 aes 中研究 这将改变线和点的颜色(看图例)

ggplot(Similarity90SUM, aes(x=Treatment, y=Similarity, group=Family,colour=Study)) +
    geom_line() +
    geom_point(shape=19, size=2)+
    scale_colour_manual(values=c("blue","darkgreen")) +
    xlab("Condition") +theme_bw()

在 geom_line 调用中传递它以仅更改线条的颜色(另请注意图例如何更改)

    ggplot(Similarity90SUM, aes(x = Treatment, y = Similarity,
                               group = Family)) +
        geom_line(aes(colour = Study)) +
        geom_point(shape = 19, size = 2)+
        scale_colour_manual(values = c("blue","darkgreen")) +
    xlab("Condition") +theme_bw()

结果图如下所示: