首页 > 解决方案 > 可能具有不同美学的多个geom_smooth?

问题描述

我必须使用相当复杂的颜色编码方案才能区分多条线/点。例如,我使用开放符号来区分填充和颜色。绘制了下图:

https://portal.idiv.de/nextcloud/index.php/s/LEJ9gnpN3fB6kAK

但是,除此之外,我想绘制一条线来表示所有线的平均值。但是因为我已经用填充和颜色指定了上面的美学,所以我无法撤消这个,但这是需要的......

此外,是否有机会拥有一个结合形状、线条和颜色的图例?问题是,对于一条线,我无法绘制回归线,因为只有一个 x 值...

编码:

#dataset
data.red <- read_csv("https://www.idiv.de/fileadmin/content/Files_EIE/Teaching/data.red.csv")

#color coding etc
experiment <- factor(data.red1$experiment, levels= c("SATAKUNTA","BANGOR",  "BIOTREE", "FORBIO","IDENT_AUCLAIR", "IDENT_MN", "KREINITZ", "ORPHEE", "BEFChina","SABAH", "SARDINILLA"))
color.experiment <-c("#2b83ba","#78c588", "#3f6d49","#018571","#123f1b","#78c588","#3f6d49","#018571","#fdae61","#d7191c","#d7191c")  
fill.experiment <- c("#2b83ba", "#ffffff","#ffffff","#ffffff","#ffffff","#78c588","#3f6d49","#018571","#fdae61","#000000","#000000")                    
line.experiment <- c("solid", "solid", "dashed", "dotted", "dotdash", "longdash", "twodash", "dashed", "solid", "solid", "dashed")

#plot
ggplot(data.red, aes(x=log.div.level , y=bas, color=experiment, shape=experiment, fill=experiment)) + 
    labs(x="SR", y="value") +
  geom_point(stroke = 1.3)+
    geom_smooth(method=lm, se=F, na.rm=F, aes(linetype=experiment))+
     scale_shape_manual(name  = "Experiment", breaks=c("SATAKUNTA","BANGOR",  "BIOTREE", "FORBIO","IDENT_AUCLAIR", "IDENT_MN", "KREINITZ", "ORPHEE", "BEFChina","SABAH", "SARDINILLA"), values=c(15,24,24,24,24,25,25,25,16,18,5))+
  scale_colour_manual(name = "Experiment", breaks=c("SATAKUNTA","BANGOR",  "BIOTREE", "FORBIO","IDENT_AUCLAIR", "IDENT_MN", "KREINITZ", "ORPHEE", "BEFChina","SABAH", "SARDINILLA"), values=color.experiment)+
  scale_fill_manual(name = "Experiment", breaks=c("SATAKUNTA","BANGOR",  "BIOTREE", "FORBIO","IDENT_AUCLAIR", "IDENT_MN", "KREINITZ", "ORPHEE", "BEFChina","SABAH", "SARDINILLA"), values=fill.experiment)+
  scale_linetype_manual(name = "Experiment", breaks=c("SATAKUNTA","BANGOR",  "BIOTREE", "FORBIO","IDENT_AUCLAIR", "IDENT_MN", "KREINITZ", "ORPHEE", "BEFChina","SABAH", "SARDINILLA"), values=line.experiment)

标签: rggplot2aes

解决方案


您必须简单地将数据和映射参数放在每个几何图形中,如下所示:

ggplot() + 
  geom_point(data = data.red,
             mapping =  aes(x=log.div.level ,
                            y=bas, color=experiment,
                            shape=experiment, 
                            fill=experiment),
             stroke = 1.3)+
  geom_smooth(data = data.red,
              mapping =  aes(x=log.div.level , y=bas,
                             color=experiment, linetype=experiment),
              method=lm, se=F, na.rm=F)+
  scale_shape_manual(name  = "Experiment", breaks=c("SATAKUNTA","BANGOR",  "BIOTREE", "FORBIO","IDENT_AUCLAIR", "IDENT_MN", "KREINITZ", "ORPHEE", "BEFChina","SABAH", "SARDINILLA"), values=c(15,24,24,24,24,25,25,25,16,18,5))+
  scale_colour_manual(name = "Experiment", breaks=c("SATAKUNTA","BANGOR",  "BIOTREE", "FORBIO","IDENT_AUCLAIR", "IDENT_MN", "KREINITZ", "ORPHEE", "BEFChina","SABAH", "SARDINILLA"), values=color.experiment)+
  scale_fill_manual(name = "Experiment", breaks=c("SATAKUNTA","BANGOR",  "BIOTREE", "FORBIO","IDENT_AUCLAIR", "IDENT_MN", "KREINITZ", "ORPHEE", "BEFChina","SABAH", "SARDINILLA"), values=fill.experiment)+
  scale_linetype_manual(name = "Experiment", breaks=c("SATAKUNTA","BANGOR",  "BIOTREE", "FORBIO","IDENT_AUCLAIR", "IDENT_MN", "KREINITZ", "ORPHEE", "BEFChina","SABAH", "SARDINILLA"), values=line.experiment) +
  labs(x="SR", y="value") +
  geom_smooth(data = data.red, method=lm,
              mapping = aes(x=log.div.level ,
                            y=bas),
              se=F, na.rm=F, col = 'black' ) 

此代码在您要求的内容中添加了一条黑色水平线。


推荐阅读