R ggplot Создание скрипичного сюжета на ранжированных данных по группам. - PullRequest
0 голосов
/ 14 февраля 2019

Я немного застрял на ggplot, пытаясь создать фигуру.

Итак, у меня есть фрейм данных, длина которого = 21685

Вот небольшой пример моих данных

x <- data.frame("Genes" = c("Gene_1","Gene_2","Gene_3","Gene_4","Gene_5",
"Gene_6","Gene_2","Gene_8","Gene_4","Gene_10"),
"Start" = c(1,1,50,400,400,500,700,700,2000,2000), 
"End" = c(10,10,200,600,600,600,1000,1000,3000,3000),
"Log2_FC"=c(-1.2,-1.2,-0.7,-0.1,-0.1,0.3,1,1,1.5,1.5),
"TPM"=c(0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1))

(x - это только часть моего исходного кадра данных, который я назвал в честь df)

Итак, у меня много координат и для каждой координаты:

  • Связанный ген (одна и та же координата может иметь несколько генов, а разные координаты могут иметь ген, который уже связан с данной позицией)

  • Уникальное значение Log2 (FC) для координат

  • Уникальное значение TPM / на координату / на ген (которые представляют активность данного гена, связанную с этими координатами)

Я отсортировалданные "Log2_FC".

Итак, я пытаюсь построить данные по группе в 1000 единиц. Для этого я добавляю в свой фрейм данных еще один столбец, который

* 1029.*

Затем сделаю мою фигуру:

 (fig1<-ggplot(df, aes(x=TPM_range_1000,y=TPM))+
  geom_violin(scale = "width",adjust = .5,fill='#A4A4A4', color="darkred")+
  geom_boxplot(width=0.1) + theme_minimal()+
  stat_summary(fun.y=mean, geom="point",size=2,color="red",aes(shape="Mean")) +
  theme(axis.text.x = element_text(angle = 90, hjust = 1))+
  guides(colour=guide_legend(order=1), shape=guide_legend(title=NULL, order=2)))

Я получил что-то вроде этого:

enter image description here

Итак, у меня есть несколько проблем ... Первая состоит в том, что все группы = 1000, кроме последней = 685. Как я могу просто изменить метку xпо длине данной группы.Потому что здесь последняя группа равна 685. Но для других данных она может отличаться.

Другое дело, как я могу объединить по одним и тем же координатам и сохранить разные TPM.Потому что на самом деле мой фрейм данных должен быть короче, но я не хочу терять информацию в столбце TPM, потому что мне нужно отобразить значения здесь.

Так что если кто-то может помочь мне хотя бы для одной из моих проблем, этобыло бы очень приятно.Спасибо, что прочитали это, это довольно сложно и не легко объяснить, но я старался изо всех сил:).

Best,

1 Ответ

0 голосов
/ 15 февраля 2019

Я нашел решение хотя бы для одной из моих проблем.Я отправляю ответ, если кому-то нужны ответы.Вы также можете высказать свою точку зрения на мое решение.

Поэтому я отбрасываю дубликаты на основе «начала», «конца», «Log2_FC», который должен быть уникальным.И поскольку я хочу сохранить только одно значение на координаты, я вычисляю среднее значение TPM для координат, имеющих несколько TPM.

#Here I drop duplicates and compute mean for coordinates which have several TPM
test =as.data.frame( df %>% group_by(start,end,Log_FC) %>% summarise(TPM=mean(TPM))) 

#I order by Log_FC value
test=test[order(test$Log_FC),]

#them make group of 500. So first 500 coordinates will have lowest Log2_FC value
test$TPM_range_500=rep(seq(500, 15000, by=500), each=500,length.out=length(test[,1])) 

#To be plot as a factor
test$TPM_range_500<-as.factor(test$TPM_range_500) 

Итак, я получил этот график:

enter image description here

Но у меня все еще есть проблема с представлением моих данных.

Длина моего кадра данных равна 14470. Таким образом, данные:

  • между 0 - 500будет в первой группе (500)
  • между 13500 - 14000 будет в группе 14000
  • между 14000-14470 будет в последней группе: 14500

Но здесь проблема в том, что последняя группа короче другой.Поэтому я хочу изменить хотя бы последнюю метку x для замены на длину группы.

Спасибо за помощь ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...