R ggplot2中带有三个图例的散点图

R ggplot2中带有三个图例的散点图,r,ggplot2,scatter-plot,R,Ggplot2,Scatter Plot,我想做一个散点图的形状,颜色和填充作为我的数据编码。形状和颜色看起来都很好,但是填充选项似乎没有响应。我已经查看了其他类似的帖子,但仍然不知道如何处理这个问题。在我的例子中,我想要的是根据两种不同的过滤器尺寸(0.22=空心,0.45=实心)填充过滤柱,并根据我的时间颜色填充所有内容。 请查找我使用的数据集和代码 Samples Filter Type Time Coord1 Coord2 45P116 0.45 Oil Incubation 16 -0.17

我想做一个散点图的形状,颜色和填充作为我的数据编码。形状和颜色看起来都很好,但是填充选项似乎没有响应。我已经查看了其他类似的帖子,但仍然不知道如何处理这个问题。在我的例子中,我想要的是根据两种不同的过滤器尺寸(0.22=空心,0.45=实心)填充过滤柱,并根据我的时间颜色填充所有内容。 请查找我使用的数据集和代码

 Samples    Filter  Type    Time    Coord1  Coord2
 45P116 0.45    Oil Incubation  16  -0.177125327477 0.0329641384336
 22P264 0.22    Oil Incubation  64  -0.036421737819 0.41278336259
 45P113 0.45    Oil Incubation  13  -0.183501817053 -0.0333774595889
 45BL30 0.45    Control 30  -0.0169216562011    -0.160467270544
 22P231 0.22    Oil Incubation  30  -0.0742549515959    0.134945242558
 22P116 0.22    Oil Incubation  16  -0.168257444167 0.0425318235085
 22P164 0.22    Oil Incubation  64  -0.0995650111648    0.321208450137
 22BL64 0.22    Control 64  0.344181403614  0.011496893707
 45P29  0.45    Oil Incubation  9   -0.139337303592 -0.154032242023
 22P216 0.22    Oil Incubation  16  -0.182624942475 0.036656544869
 22P30  0.22    Oil Incubation  0   0.232890938751  -0.0365286035332
 45P23  0.45    Oil Incubation  3   0.335212340096  0.00229714294784
 22P364 0.22    Oil Incubation  64  -0.0265850037098    0.267838399813
 45P26  0.45    Oil Incubation  6   -0.0663530024752    -0.123614294282
 45P316 0.45    Oil Incubation  16  -0.180387066353 0.0244231332556
 22P16  0.22    Oil Incubation  6   -0.0938690796601    -0.123292570064
 22P13  0.22    Oil Incubation  3   -0.000929711149241  -0.0840936522112
 22P36  0.22    Oil Incubation  6   -0.0846096566973    -0.126315336717
 22P39  0.22    Oil Incubation  9   -0.145400678025 -0.171058987178
 45P164 0.45    Oil Incubation  64  -0.160359423757 0.439794230436
 22P19  0.22    Oil Incubation  9   -0.138575642598 -0.151960075733
 45P313 0.45    Oil Incubation  13  -0.176079013758 0.050997652543
 45BL64 0.45    Control 64  0.0288347544654 -0.1458771364
 45P330 0.45    Oil Incubation  30  -0.11228777477  0.204236728786
 45P36  0.45    Oil Incubation  6   -0.0761185616066    -0.121261486374
 45P130 0.45    Oil Incubation  30  -0.094228858564 0.100652965768
 22BL0  0.22    Control 0   0.239232948872  -0.036785772233
 22P213 0.22    Oil Incubation  13  -0.18113904214  -0.0287178094404
 22BL6  0.22    Control 6   -0.0600555194535    -0.194650371605
 45P33  0.45    Oil Incubation  3   0.340399779328  0.0171852693215
 45P30  0.45    Oil Incubation  0   0.431938929593  0.0196841881272
 45BL6  0.45    Control 6   0.357256101911  -0.0188140900434
 45BL9  0.45    Control 9   0.303457604982  -0.0443188527517
 22P316 0.22    Oil Incubation  16  -0.164460159926 -0.0129812590712
 22P313 0.22    Oil Incubation  13  -0.188614376178 0.00058901489101
 45P39  0.45    Oil Incubation  9   -0.149217759045 -0.167311625113
 22P131 0.22    Oil Incubation  30  -0.0651994575885    0.0656871734895
 22BL31 0.22    Control 30  0.335856403002  0.0724160545763
 45P19  0.45    Oil Incubation  9   -0.142421940226 -0.160880360066
 22P331 0.22    Oil Incubation  30  -0.0500301022508    0.0416246477279
 45BL0  0.45    Control 0   0.381611397751  0.0200030589204
 22P113 0.22    Oil Incubation  13  -0.192581008392 -0.00938532222554
 45P16  0.45    Oil Incubation  6   -0.085999339488 -0.121939087208
 45BL3  0.45    Control 3   0.332023830601  0.036732406277
 45P13  0.45    Oil Incubation  3   0.315664193595  0.0248256483492
 45P216 0.45    Oil Incubation  16  -0.172909653606 0.030607355003
 45P213 0.45    Oil Incubation  13  -0.18326004657  0.00570693606563
 22P29  0.22    Oil Incubation  9   -0.150029591452 -0.16569360913
 22P26  0.22    Oil Incubation  6   -0.110220935459 -0.134301793132
 45P364 0.45    Oil Incubation  64  -0.100468231806 0.248528601323
 45BL16 0.45    Control 16  0.341331109786  0.00915399605284
 45BL13 0.45    Control 13  0.155782679403  -0.17960863481
 45P230 0.45    Oil Incubation  30  -0.0452735875021    0.0316966419992
以及守则:

    PCoA <- read.delim(file.choose(), header=T)
attach(PCoA)
library(ggplot2)
PCoA$Time <- as.character(PCoA$Time)
PCoA$Filter <- as.character(PCoA$Filter)
cols <- c("0" = "red","3" = "blue","6" = "brown", "9" = "hotpink", "13" = "orange","16" = "olivedrab","30" = "azure3", "64" = "purple")
ggplot(PCoA, aes(x=Coord1, y=Coord2, shape=Type, colour=Time)) + 
  scale_colour_manual(values = cols, breaks=c("0","3","6","9","13","16","30","64")) + 
  geom_point(size=7) + xlab("PC1 (39.7%)") + ylab("PC2 (20.2%)") + 
  geom_hline(aes(yintercept=0)) + geom_vline(aes(xintercept=0)) + 
  theme(legend.text = element_text(size = 16), 
        legend.title = element_text(size=18), 
        axis.title.x = element_text(size=18, vjust=-0.7), 
        axis.title.y = element_text(size=18, vjust=2)) + 
  theme(axis.text = element_text(colour = "black", size="16")) + 
  theme(panel.grid.major = element_blank(), 
        panel.grid.minor = element_blank(), 
        panel.background = element_blank(), 
        axis.line = element_line(colour = "white"))
PCoA您需要使用右侧(21:25)并指定您的填充。这有一些好的建议。尽管在这一点上,您的数据越来越难以用不同的轮廓和填充颜色来说明。(可以将时间编码为填充,并对一个过滤器使用较亮的颜色,对另一个过滤器使用较暗的颜色,或者使过滤器类型成为您的轮廓颜色)

以下是使用以下工具编辑的图表:

  • 数据格式在ggplot中编码为.character()
,而不是在 原始数据帧
  • scale\u parameter\u manual()中指定的图例名称
  • aes()中定义的填充
  • 作为最后一行添加的形状和填充
  • 使用
    override.aes修复填充图例

  • 原始绘图+编辑的绘图:

    编辑

    OP询问如何微调填充,以便变量1定义的填充由变量2确定,即,如果变量2为A,则点为彩色填充,但如果变量2为B,则所有点为白色填充。由于第三个变量决定了形状,这增加了额外的复杂性

    有两种可能的解决方案:

  • 通过
    aes(shape=interaction(Variable2,Variable3))
    组合变量,并指定仅允许颜色(15:20)和颜色+填充(21:25)的形状
  • 比#1更精简但控制更少的是指定具有空心中心(0:6)而不是填充中心(21:25)的形状。然后不需要定义
    填充
  • 加载库(比例)并设置填充alpha属性(最后一个示例),即
    scale\u fill\u手册(值=alpha(c(“蓝色”、“红色”),.3))
    (对于本例,此解决方案可能不可行。)
  • 分别绘制点及其美学:即
    geom_点(数据=子集,aes())
  • 方法1:

    您需要使用右侧(21:25)并指定您的填充。这有一些好的建议。尽管在这一点上,您的数据越来越难以用不同的轮廓和填充颜色来说明。(可以将时间编码为填充,并对一个过滤器使用较亮的颜色,对另一个过滤器使用较暗的颜色,或者使过滤器类型成为您的轮廓颜色)

    以下是使用以下工具编辑的图表:

    • 数据格式在ggplot中编码为.character(),而不是在 原始数据帧
    • scale\u parameter\u manual()中指定的图例名称
    • aes()中定义的填充
    • 作为最后一行添加的形状和填充
    • 使用
      override.aes修复填充图例

    原始绘图+编辑的绘图:

    编辑

    OP询问如何微调填充,以便变量1定义的填充由变量2确定,即,如果变量2为A,则点为彩色填充,但如果变量2为B,则所有点为白色填充。由于第三个变量决定了形状,这增加了额外的复杂性

    有两种可能的解决方案:

  • 通过
    aes(shape=interaction(Variable2,Variable3))
    组合变量,并指定仅允许颜色(15:20)和颜色+填充(21:25)的形状
  • 比#1更精简但控制更少的是指定具有空心中心(0:6)而不是填充中心(21:25)的形状。然后不需要定义
    填充
  • 加载库(比例)并设置填充alpha属性(最后一个示例),即
    scale\u fill\u手册(值=alpha(c(“蓝色”、“红色”),.3))
    (对于本例,此解决方案可能不可行。)
  • 分别绘制点及其美学:即
    geom_点(数据=子集,aes())
  • 方法1:

    您需要使用右侧(21:25)并指定您的填充。这有一些好的建议。尽管在这一点上,您的数据越来越难以用不同的轮廓和填充颜色来说明。(可以将时间编码为填充,并对一个过滤器使用较亮的颜色,对另一个过滤器使用较暗的颜色,或者使过滤器类型成为您的轮廓颜色)

    以下是使用以下工具编辑的图表:

    • 数据格式在ggplot中编码为.character(),而不是在 原始数据帧
    • scale\u parameter\u manual()中指定的图例名称
    • aes()中定义的填充
    • 作为最后一行添加的形状和填充
    • 使用
      override.aes修复填充图例

    原始绘图+编辑的绘图:

    编辑

    OP询问如何微调填充,以便变量1定义的填充由变量2确定,即,如果变量2为A,则点为彩色填充,但如果变量2为B,则所有点为白色填充。由于第三个变量决定了形状,这增加了额外的复杂性

    有两种可能的解决方案:

  • 通过
    aes(shape=interaction(Variable2,Variable3))
    组合变量,并指定仅允许颜色(15:20)和颜色+填充(21:25)的形状
  • 比#1更精简但控制更少的是指定具有空心中心(0:6)而不是填充中心(21:25)的形状。然后不需要定义
    填充
  • 加载库(缩放)并设置填充alpha属性(最后一个示例),即
    scale\u fi
    
    ggplot(PCoA, aes(x=Coord1, y=Coord2, shape=as.character(Type), colour=as.character(Time), fill=as.character(Filter) )) + #Edit
      scale_colour_manual(name="Time", values = cols, breaks=c("0","3","6","9","13","16","30","64")) + #Edit
      geom_point(size=7) + xlab("PC1 (39.7%)") + ylab("PC2 (20.2%)") + 
      geom_hline(aes(yintercept=0)) + geom_vline(aes(xintercept=0)) + 
      theme(legend.text = element_text(size = 16), 
            legend.title = element_text(size=18), 
            axis.title.x = element_text(size=18, vjust=-0.7), 
            axis.title.y = element_text(size=18, vjust=2)) + 
      theme(axis.text = element_text(colour = "black", size="16")) + 
      theme(panel.grid.major = element_blank(), 
            panel.grid.minor = element_blank(), 
            panel.background = element_blank(), 
            axis.line = element_line(colour = "white")) +
      scale_shape_manual(name="Type", values=c(21,24)) + #Edit
      scale_fill_manual(name="Filter", values=c("black", "white")) + #Edit
      guides(fill = guide_legend(override.aes = list(   #Edit
                    fill = c("black", "white"),         #Edit
                    shape=22,                           #Edit
                    colour="black") ))                  #Edit
    
    ggplot(PCoA, aes(x=Coord1, y=Coord2, 
                     shape=interaction(as.character(Type), Filter),
                     colour=as.character(Time), 
                     fill=as.character(Time) )) + #Edit
      scale_colour_manual(name="Time", values = cols, 
          breaks=c("0","3","6","9","13","16","30","64")) + #Edit
      geom_point(size=7) + xlab("PC1 (39.7%)") + ylab("PC2 (20.2%)") + 
      geom_hline(aes(yintercept=0)) + geom_vline(aes(xintercept=0)) + 
      theme(legend.text = element_text(size = 16), 
            legend.title = element_text(size=18), 
            axis.title.x = element_text(size=18, vjust=-0.7), 
            axis.title.y = element_text(size=18, vjust=2),
            legend.key = element_rect(fill=NA)) +                       #Edit
      theme(axis.text = element_text(colour = "black", size="16")) + 
      theme(panel.grid.major = element_blank(), 
            panel.grid.minor = element_blank(), 
            panel.background = element_blank(), 
            axis.line = element_line(colour = "white")) +
      scale_shape_manual(name="Type/Filter", values=c(21, 16, 24, 17),
                         labels=c("Control, 0.22", "Incubation, 0.22",
                                  "Control, 0.45", "Incubation, 0.45") ) + #Edit
      scale_fill_manual(name="Filter", values=rep("white", length(cols)), guide=FALSE )  #Edit