使用 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()
结果图如下所示:
我正在尝试使用 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()
结果图如下所示: