根据不同时间段的处理绘制散点图(或 X、Y)

Make scatter (or X, Y) plot by treatment for different time period

我有这样的数据(R 数据帧):

Treatment   Diameter(inches).Sep    Diameter(inches).Dec
Aux_Drop    NA  NA
Aux_Spray    3.7    2
DMSO    NA  NA
Water   4.2 2
Aux_Drop    2.6 3
Aux_Spray    3.7    3
DMSO    4   2
Water   5.2 1
Aux_Drop    5.4 2
Aux_Spray    3.4    2
DMSO    4.8 2
Water   4.2 2
Aux_Drop    4.7 2
Aux_Spray    2.7    2
DMSO    3.4 2
Water   4.9 2
.......
.......

我想为每个 treatment 组绘制 diameter 的散点图(或 x、y)。我发现 lattice library plot 现在更有用,我用过:

require(lattice)
xyplot(`Diameter(inches).Sep` ~ Treatment , merged.Sep.Dec.Mar, pch= 20)

生成图:

但是,我想在 "Diameter of Sep" 旁边为每个具有不同颜色的处理添加 "Diameter from Dec" 的散点图。 我无法找到一个我目前可以使用的可行示例。

使用 latticeggplot2base plot 或任何其他方法会非常有用。

谢谢,

是这样的吗?

library(tidyverse)
df %>%
    gather(Month, Diameter, -Treatment) %>%
    ggplot(aes(Treatment, Diameter)) +
    geom_point(aes(colour = Month), position = position_dodge(width = 0.9))

您可以通过更改 position_dodge 中的 width 来调整不同颜色点之间的分隔量。


示例数据

df <- read.table(text =
    "Treatment   Diameter(inches).Sep    Diameter(inches).Dec
Aux_Drop    NA  NA
Aux_Spray    3.7    2
DMSO    NA  NA
Water   4.2 2
Aux_Drop    2.6 3
Aux_Spray    3.7    3
DMSO    4   2
Water   5.2 1
Aux_Drop    5.4 2
Aux_Spray    3.4    2
DMSO    4.8 2
Water   4.2 2
Aux_Drop    4.7 2
Aux_Spray    2.7    2
DMSO    3.4 2
Water   4.9 2", header = T)

这是一个 tidyverse 解决方案。它使用 tidyr::gather 将两种直径类型放在一列中。然后,您可以对该列中的值进行分面。我隐藏了颜色图例,因为类别从轴标签中显而易见。

假设数据框命名为mydata.

library(tidyverse)
mydata %>% 
  gather(Result, Value, -Treatment) %>% 
    ggplot(aes(Result, Value)) + 
    geom_jitter(aes(color = Result), 
                width = 0.1) + 
    facet_wrap(~Treatment) +
    guides(color = FALSE)