Как кластеризировать точки на основе обоих диапазонов значений x и y в ggplot

#r #ggplot2 #cluster-computing

#r #ggplot2 #кластерные вычисления

Вопрос:

У меня есть набор данных о значениях экспрессии РНК в разных выборках. Я применил к ним линейную подгонку и статистику Байеса, а затем построил график изменения логарифмического сгиба («logFC») против «P.Value», чтобы получить следующий ggplot. Теперь я хочу раскрасить значения с помощью «logFC» < -2 или > 2 и значения с помощью «P.Value» <0.05, оба цвета отличаются от остальных значений. Как я могу это сделать?

график ggplot volcano для logFC и значения P экспрессируемых генов

Ответ №1:

Хотя вы действительно могли бы отображать подмножества данных в виде слоев, вы также могли бы сделать цветовую эстетику вложенным 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")
  

Создано 2020-09-17 пакетом reprex (версия 0.3.0)

Ответ №2:

Кажется, вы использовали geom_point -график для всего вашего набора данных. Один из способов решить ваш вопрос — добавить дополнительные точечные слои с подмножествами.

Вы еще не предоставили пример набора данных, поэтому я использовал набор данных iris. Я изменил цвет меньших и больших значений Sepal.Длина путем подмножества набора данных и добавления точек синим цветом. Кроме того, небольшие значения в Sepal.Ширина получила зеленый цвет.

Чтобы перенести этот код в ваш случай. Отфильтруйте свой набор данных для желаемого LogFC и / или 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")
  

введите описание изображения здесь