p = ggplot(plasma1, aes(x=Day, y=Control, colour=Supp))
+ theme(panel.background = element_rect(fill='white', colour='black'))
+ geom_point(size=2, shape=21)
+ geom_errorbar(aes(ymin=Control-SEMcontrol, ymax=Control+SEMcontrol), width=1)
p + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank())
+ xlab("X") + ylab("Y") + geom_line(linetype="dashed")
Run Code Online (Sandbox Code Playgroud)
我看过themes(),但似乎只能更改网格线,而不能更改趋势线。(理想情况下,我想将红色和蓝色更改为红色和黑色
注意:关于SO的约定是,“答案”保留用于演示解决方案的可复制代码。评论中包含的内容(如建议)少。这就是为什么提问者提供他们的数据作为问题的一部分如此重要的原因;否则,我们必须为您弥补一些,大多数人(合理地)不愿意这样做。
您所要求的答案如下,但是在进入该答案之前,您应该了解ggplot已经精心选择了默认的配色方案,因此,只有在有充分理由的情况下才应更改它。问题是人类的进化导致某些颜色(如红色)相对于其他颜色获得了感知上的提升。因此,如果您有红色曲线和黑色曲线,则红色曲线会留下更强的“印象”。这个事实已在某些领域(例如广告)广泛使用,以从心理上操纵观看者,但在科学数据可视化中却没有位置。的ggplot默认值,其基于所述颜色HCL系统上(这又是基于上孟塞尔颜色体系),请尝试实现两个目标:创建一个调色板,使每种颜色与所有其他颜色有最大的区别,并消除相对的感知影响。有这个话题的相当技术讨论这里,和一些很好的例子在这里。
底线:除非有充分的理由,否则请勿更改颜色。
说了这么多,您的问题的简单答案是使用scale_color_manual(...),如下所示:
# all this to set up the example - you have this already
set.seed(1) # for reproducible example
x <- rep(c(1,2,4,8,11,14), each=5)
df1 <- data.frame(Day=x,Control=125*(1-exp(-x/5))+rnorm(30,sd=25),Supp="N")
df2 <- data.frame(Day=x,Control=90*(1-exp(-x/3))+rnorm(30,sd=25),Supp="C")
plasma1 <- aggregate(Control~Day+Supp,rbind(df2, df1), FUN=function(x)c(Control=mean(x),SEMcontrol=sd(x)/sqrt(length(x))))
plasma1 <- data.frame(plasma1[,1:2],plasma1[[3]])
# you start here
library(ggplot2)
ggp <- ggplot(plasma1, aes(x=Day, y=Control, color=Supp))+
geom_point(size=3, shape=21)+
geom_line(linetype="dashed")+
geom_errorbar(aes(ymax=Control+SEMcontrol, ymin=Control-SEMcontrol), width=0.3)+
theme_bw()+theme(panel.grid=element_blank())
ggp + scale_color_manual(values=c(C="red",N="black"))
Run Code Online (Sandbox Code Playgroud)
产生此:
正如评论中提到的那样,您还可以使用由宾夕法尼亚州立大学的辛西娅·布鲁尔教授开发的布鲁尔调色板之一。这些原本打算用于制图应用,但已广泛用于科学可视化。
ggp + scale_color_brewer(palette="Set1")
Run Code Online (Sandbox Code Playgroud)