如何根据ggplot中的x和y值范围对点进行聚类

How to cluster points based on both x and y value ranges in ggplot

我有不同样本的RNA表达值数据集。我对它们应用了线性拟合和贝叶斯统计,然后针对“P.Value”绘制了对数倍数变化(“LogFC”)以获得以下 ggplot。现在我想用“LogFC”< -2 或> 2 给值上色,用“P.Value”<0.05 给值上色,两者的颜色都与其余值不同。我该怎么做?

您似乎对整个数据集使用了 geom_point-plot。 解决您的问题的一种方法是添加额外的 point-layers 和子集。

您还没有提供示例数据集,所以我使用了鸢尾花数据集。 我通过对数据集进行子集化并在蓝色中添加点来重新着色 Sepal.Length 的更小和更高的值。 Sepal.Width 中更小的值变为绿色。

将此代码转移到您的案例中。过滤您想要的 LogFC and/or P.Value 的数据集,并将这些数据集和颜色参数添加到其他 geom_point 层。

ggplot(data = iris, aes(x = Sepal.Length, y = Sepal.Width)) +
  geom_point(color = "red") +
  geom_point(data = iris[iris$Sepal.Length < 5 | iris$Sepal.Length > 7, ], color = "blue") +
  geom_point(data = iris[iris$Sepal.Width < 3, ], color = "green")

虽然您确实可以将数据的子集绘制为图层,但您也可以将颜色美学设置为嵌套的 ifelse() 语句。你也会得到正确的图例。示例如下:

library(ggplot2)
set.seed(0)

df <- data.frame(
  logFC = rt(10000, 10),
  pvalue = runif(10000)
)

ggplot(df, aes(logFC, log10(pvalue))) +
  geom_point(
    aes(colour = ifelse(is.na(pvalue) | pvalue > 0.05 | abs(logFC) < 2, "n.s.",
                        ifelse(logFC >= 2, "Up", "Down")))
  ) +
  scale_colour_manual(values = c("limegreen", "grey50", "dodgerblue"),
                      name = "Category") +
  scale_y_continuous(trans = "reverse")

reprex package (v0.3.0)

于 2020-09-17 创建