问题描述
我的数据集中有40个主题,每组4个,我想创建一个图,显示每个主题重复(3个重复)的线;通过主题为它们着色,通过复制对其进行整形。我的问题是每个面(组)中的颜色是如此相似,以至于我无法真正区分它们。
我的情节主要代码是:
ggplot(T_S,aes(x=as.numeric(Day),y=variable,colour=as.factor(Subj))) +
geom_point(aes(shape=as.factor(Rep))) +
geom_line(aes(linetype=as.factor(Rep))) +
facet_wrap(.~Group,ncol=3) +
theme_bw() +
theme(legend.position="none")
下面使用viridis软件包说明了一个无法区分颜色的意思。有没有一种方法可以使颜色在每个构面内的深紫色和黄色之间交替显示?
[带有Viridis软件包的示例] [1]
我尝试过的其他事情:
-
scale_color_brewer(palette="Dark2")
-
scale_fill_manual(values = wes_palette("GrandBudapest1",n = 38))
-
scale_color_gradientn(colours = rainbow(40))
我也研究了PolyChrome和randomcoloR软件包,但看不到它们如何与ggplot2一起使用。任何其他建议也欢迎! 在此先感谢您的帮助。 [1]:https://i.stack.imgur.com/2iHXY.png
解决方法
如果您没有在问题中包含数据样本,那么任何人都很难在Stack Overflow上提供经过测试的有效解决方案。但是,在进行了一些逆向工程之后,我创建了应该合理地近似于您的数据结构的
set.seed(69)
T_S <- data.frame(Day = rep(c(4,11,16,25),120),Subj = rep(1:40,each = 12),Rep = rep(rep(1:3,each = 4),40),Group = factor(rep(1:10,each = 48),c(2:10,1)),variable = c(replicate(120,cumsum(runif(4,400)) + 250)))
我们可以看到您的绘图代码得到了类似的结果:
library(ggplot2)
ggplot(T_S,aes(x=as.numeric(Day),y=variable,colour=as.factor(Subj))) +
geom_point(aes(shape=as.factor(Rep))) +
geom_line(aes(linetype=as.factor(Rep))) +
facet_wrap(.~Group,ncol=3) +
theme_bw() +
theme(legend.position="none") +
scale_colour_viridis_d()
这样做的原因是您的主题编号是连续的,并且与该组完全相关。为了进行绘图,我们只需要四种颜色-一种用于每个面板中的每个主题。最简单的方法是在每个面板中将主题重新编号为1:4。
T_S$Subj <- T_S$Subj %% 4 + 1
所以现在完全相同的绘图代码为我们提供了:
ggplot(T_S,ncol=3) +
theme_bw() +
theme(legend.position="none") +
scale_colour_viridis_d()
似乎可以通过“ RColorBrewer”包通过不同调色板的颜色组合来完成。
使用来自Allan Cameron的模拟数据:
require(ggplot2)
require(RColorBrewer)
set.seed(69)
T_S <- data.frame(Day = rep(c(4,400)) + 250)))
现在,我们可以组合来自不同调色板的颜色:
mycolours = c(brewer.pal(name="Accent",n = 7),brewer.pal(name="Dark2",brewer.pal(name="Paired",brewer.pal(name="Set3",brewer.pal(name="Set1",n = 7))
在这种情况下,调色板并不重要,但我尝试选择它们以使它们脱颖而出。这里有很棒的文档,提供有关调色板的完整详细信息:https://www.datanovia.com/en/blog/the-a-z-of-rcolorbrewer-palette/。也可以选择更多或更少的颜色,在这种情况下,共有42种颜色。例如,如果需要说1000种颜色,则可能会出现问题,因为此包装中的颜色很少。
最后是绘制数据的代码:
ggplot(T_S,y= variable,colour = as.factor(Subj))) +
geom_point(aes(shape = as.factor(Rep))) +
geom_line(aes(linetype = as.factor(Rep))) +
facet_wrap(.~Group,ncol = 3) +
theme_bw() +
theme(legend.position="none") +
scale_color_manual(values = mycolours)
GB