如何基于两个数据框为特定点着色

时间:2019-02-16 03:24:22

标签: r ggplot2

我融合了两个数据集。我想画

df <-structure(list(test = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "D", class = "factor"), 
    N = 1:15, value = c(0.193333333333333, 0.166666666666667, 
    0.226666666666667, 0.233333333333333, 0.246666666666667, 
    0.113333333333333, 0.14, 0.126666666666667, 0.233333333333333, 
    0.206666666666667, 0.14, 0.26, 0.213333333333333, 0.206666666666667, 
    0.22)), row.names = c(NA, 15L), class = "data.frame")

我的df2是

df2 <- structure(list(test = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L), N = 1:15, value = c(0.00734658620417139, 
0.0310075916430482, 0.000899636750923194, 0.000567925967793537, 
0.000217454812833306, 0.290391297453855, 0.105715835833684, 0.180098464605175, 
0.000567925967793537, 0.00330103411768823, 0.105715835833684, 
7.89376056511415e-05, 0.00216893397611406, 0.00330103411768823, 
0.00140621607072411)), row.names = c(NA, 15L), class = "data.frame")

我这样绘制df

qplot(data = df, x = value,y = N,color=N)+geom_point()

我要绘制那些在df中的值小于0.13并且在df2中其相应的值小于0.5的红色的图形。

例如,在这种情况下,查看两个数据中的N(数字6),df值为0.11,而df2中的值为2.903913e-01(小于0.5),所以,我希望将其着色为红色。

我不在乎您是否使用 qplot

以外的其他方式

1 个答案:

答案 0 :(得分:2)

这是一个选项。本质上,您必须创建一个类别变量,以后可以在ggplot中使用它来指定点的颜色。

# join data frames to facilitate comparison of values:
dfComb <- full_join(df, df2, by = c("N"))

dfComb %>% 
  mutate(
    colorVar = case_when( # categorize data points based on your logic (if_else would also be nice)
      value.x < .13 & value.y < .5 ~ "red",
      TRUE ~ "not red"
    )
  ) %>% # pipe dataset into ggplot...
  ggplot() +
  geom_point( # the aesthetics here match your qplot
    aes(value.x, N, color = colorVar)
    ) +
  scale_color_manual( # set colors manually to get red
    values = c("blue", "red")
  )

哪个会产生:

enter image description here