Я хочу отобразить 10 лучших генов с повышенной и пониженной регуляцией на графике вулкана

#r #ggplot2

#r #ggplot2

Вопрос:

В моем фрейме данных New.df.7vsNO есть столбец с именем Genes, в котором я хочу иметь возможность отображать 10 лучших генов с повышенной и пониженной регуляцией в моих данных. Я не уверен, как это написать, чтобы это можно было отфильтровать на графике. Кроме того, я хочу фактически пометить точки данных на графике, я думал, что выполнение label = Genes отобразит хотя бы некоторые из названий генов.

 ggplot(New.df.7vsNO, aes(x = log2FC, y = logpv, col = diffexpressed, label = Genes))   geom_point()   theme_minimal()   scale_color_manual(values = c("blue", "red", "black"))   geom_vline(xintercept=c(-1.6, 1.6), col="red")  
        geom_hline(yintercept=-log10(0.05), col="red") 
  
 structure(list(log2FC = c(2.5576, -1.7629, 4.5593, -1.6414, 4.7747, 
1.9217, 2.5951, -2.4236, 4.2056, -2.8089, -2.1215, -1.7551, 7.6618, 
1.9732, 1.768, -1.7532, 2.1137, -7.4119, -5.0595, -1.6435), logpv = c(6.23062267392386, 
2.4454139371159, 6.87289520163519, 2.41294040382783, 9.84466396253494, 
3.31880400398931, 5.49214412830417, 5.38090666937326, 10.3914739664228, 
7.39254497678533, 4.19928292171762, 2.43023996241365, 3.67370511218151, 
3.17656489822122, 2.45950785169463, 2.70542356079838, 3.13990167030148, 
3.04151256697968, 14.8041003475908, 2.43438827509794), diffexpressed = c("UP", 
"DOWN", "UP", "DOWN", "UP", "UP", "UP", "DOWN", "UP", "DOWN", 
"DOWN", "DOWN", "UP", "UP", "UP", "DOWN", "UP", "DOWN", "DOWN", 
"DOWN"), Genes = c("Ngfr", "Axin2", "Igsf5", "Dlat", "Scnn1g", 
"Ckmt1", "Tmprss2", "Pparg", "Sema4f", "Hk2", "Pxmp4", "Scn4a", 
"Slc13a2", "Timp1", "Uhrf1", "Cnn1", "Ube2c", "Rhbg", "Tmem79", 
"Cyp51")), row.names = c(NA, 20L), class = "data.frame")
  

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

Комментарии:

1. Чтобы помочь нам помочь вам, не могли бы вы, пожалуйста, сделать вашу проблему воспроизводимой, поделившись образцом ваших данных? Просто введите, например, dput(head(NAME_OF_DATASET, 20)) в консоль, которая выдает первые 20 строк вашего df, и скопируйте и вставьте выходные данные, начинающиеся с structure(.... , в свой пост.

2. КСТАТИ: … вы должны добавить geom_text для отображения меток.

3. Привет, Стефан, дай мне знать, сработало ли это. Спасибо.

4. Да. Сработало. (;

Ответ №1:

Вы можете получить фрейм данных с лучшими генами, например, используя dplyr::top_n . Вместо 10 лучших я использовал 3 лучших для целей exmaple. Кроме того, я не так много знаю о генах, поэтому я выбрал logpv в качестве весовой переменной.

Затем этот фрейм данных можно использовать в течение секунды geom_point , где я выбрал больший размер.

Чтобы получить метки, которые я выбрал ggrepel::geom_text_repel , который делает все возможное, чтобы избежать перекрытия меток:

 library(ggplot2)
library(dplyr)

topdown <- New.df.7vsNO %>% 
  group_by(diffexpressed) %>% 
  dplyr::top_n(3, wt = logpv)

ggplot(New.df.7vsNO, aes(x = log2FC, y = logpv, col = diffexpressed, label = Genes))   
  geom_point()   
  ggrepel::geom_text_repel(show.legend = FALSE)   
  #geom_text(vjust = -.1, show.legend = FALSE)   
  geom_point(data = topdown, size = 3, show.legend = FALSE)   
  theme_minimal()   
  scale_color_manual(values = c("blue", "red", "black"))   
  geom_vline(xintercept=c(-1.6, 1.6), col="red")  
  geom_hline(yintercept=-log10(0.05), col="red")