Как построить линии и точки на одном графике при использовании данных разного размера

#r #ggplot2 #plot

#r #ggplot2 #график

Вопрос:

Этот игрушечный фрейм данных представляет мои данные.

         Time    Gene     Value
   1      0      A         1
   2      1      A         2
   3      2      A         3
   4      0      B         1 
   5      1.2    B         2 
   6      1.7    B         2 
   7      2.1    B         2 
   8      3      B         2
 

Используя следующий код, я могу превратить это в линейный график с двумя линиями, одна для A и одна для B.

 ggplot(data=Data, aes(x=Time, y=Value, group=Gene))  
geom_line(aes(color=Gene), linetype="longdash", size=2) 
theme_classic() 
labs(title= paste("Genes over time course"),
     x="Time",
     y="Expression") 
theme(plot.title=element_text(size=20, face="bold",hjust = 0.5), 
      axis.text.x=element_text(size=10), 
      axis.text.y=element_text(size=10),
      axis.title.x=element_text(size=15),
      axis.title.y=element_text(size=15),
      legend.text=element_text(size=10))
 

Однако я бы хотел, чтобы ген A был представлен только точками, а ген B был представлен только линией. Как я могу выполнить это с учетом данных?

Ответ №1:

Используя data=~subset(., ...) , мы можем контролировать, какие данные поступают на каждый уровень.

 ggplot(Data, aes(x = Time, y = Value, color = Gene, group = Gene))  
  geom_line(data = ~ subset(., Gene != "A"))  
  geom_point(data = ~ subset(., Gene == "A"))
 

геометрические точки и линии ggplot

(Вы также можете использовать dplyr::select вместо subset , результаты те же.)