R 使用ggplot2中的两个不同因子定义col和bg的颜色

R 使用ggplot2中的两个不同因子定义col和bg的颜色,r,colors,plot,ggplot2,R,Colors,Plot,Ggplot2,我试图在3代人中展示13个不同程序的敏感性和选择性的变化。以下是程序1和2的数据,例如: Sensitivity Selectivity Program Generation 0.317 0.347 1 1 0.282 0.301 2 1 0.496 0.118 1 2 0.339 0.176 2 2 0.525 0.050 1

我试图在3代人中展示13个不同程序的敏感性和选择性的变化。以下是程序1和2的数据,例如:

Sensitivity Selectivity Program Generation
0.317       0.347       1       1
0.282       0.301       2       1
0.496       0.118       1       2
0.339       0.176       2       2
0.525       0.050       1       3
0.397       0.131       2       3
我想要一个散点图,用线连接给定程序的点(每个程序3个点,每一代一个点),每个程序有不同的颜色,点的轮廓颜色与该程序的线相同,但填充由代定义

一些点对非常接近,生成点最终会重叠一点,因此,如果将点轮廓和填充映射在一起,而不是为程序创建一个层并为生成覆盖另一个层,则会更清晰。所以我使用一个可以定义轮廓和填充的形状(pch=21)。我越来越接近于我想要的情节:

dataset=read.csv("10cmpds_mammal_mean_allgens.csv",h=T)

Generation<-factor(dataset$Generation)
Program<-factor(dataset$Program)

ggplot()+
  geom_line(data=dataset,aes(x=Sensitivity,y=Selectivity,color=factor(Program)),size=1)+
  geom_point(data=dataset, aes(x=Sensitivity, y=Selectivity, color=factor(Program)), pch=21, col=factor(Program), bg=factor(Generation),size=6)+
  scale_color_manual(name="", values=c("#D42515","#D49A95","#DD7310","#F0CD1E","#0FB135","#0B78CC","#679EC9","#353535","#505050","#7B7A7C","#B4B4B4","#8348CF","#A787D1"))
如果可能的话,我仍然希望在ggplot2中生成此图,以便该图可以轻松匹配其他图的样式

我想你想要

ggplot(data = dataset,
       aes(x = Sensitivity, y = Selectivity,
           color = factor(Program),
           fill = factor(Generation),
           group = factor(Program)))+
  geom_line(size = 1) +
  geom_point(shape = 21, size = 6) +
  scale_color_manual(name = "",
                     values = c("#D42515", "#D49A95", "#DD7310",
                                "#F0CD1E", "#0FB135", "#0B78CC", 
                                "#679EC9", "#353535", "#505050", 
                                "#7B7A7C", "#B4B4B4", "#8348CF", "#A787D1")) + 
  scale_fill_manual(values = c("bisque", "grey", "black"))
如果在原始的
ggplot()
调用中指定美学映射(以及数据),则无需在后续层中重复这些映射。我在填充中使用了与在颜色中相同的颜色,这可能是一个糟糕的选择,但您可以将它们更改为正确的数字/值

同样值得指出的是,像“pch”和“bg”这样难以记忆的首字母缩略词在ggplot中是毫无意义的。“pch”替换为
形状
,“bg”替换为
填充
(“col”替换为
颜色

我还添加了HitePastimProvesReadability

使用您在问题中提供的数据,可以得出以下曲线图


谢谢Gregor,但这似乎无法解决问题。问题是我需要13种不同的线条/轮廓颜色(每个程序一种),但只有3种不同的填充颜色(每一代一种)。因此,在给定的程序行中,将有3个点,每个点都有一个唯一的颜色来表示第1、2或3代。请立即尝试。我还没有看到你在顶部指定只有3代人。您只需使
fill
scale中的值数量等于所需值的数量。我切换到了你编辑的颜色。啊,就是这样。非常感谢。
ggplot(data = dataset,
       aes(x = Sensitivity, y = Selectivity,
           color = factor(Program),
           fill = factor(Generation),
           group = factor(Program)))+
  geom_line(size = 1) +
  geom_point(shape = 21, size = 6) +
  scale_color_manual(name = "",
                     values = c("#D42515", "#D49A95", "#DD7310",
                                "#F0CD1E", "#0FB135", "#0B78CC", 
                                "#679EC9", "#353535", "#505050", 
                                "#7B7A7C", "#B4B4B4", "#8348CF", "#A787D1")) + 
  scale_fill_manual(values = c("bisque", "grey", "black"))