ggplot2 :: geom_bar () положительные и отрицательные столбцы около нуля - PullRequest
0 голосов
/ 01 августа 2020

У меня есть набор данных, содержащий масштабированное значение экспрессии тысяч генов из образцов, выделенных с использованием двух разных пробирок. Я хотел сделать некоторые вычисления на этом наборе данных https://www.sendspace.com/file/4ebpk3, используя эти две функции, и построить результат:

#Create a function to calculate molecular distance
mol.distance <- function(df, grp){
  x = df[grp]
  x = as.numeric(x)
  y = as.numeric(df)
  mean.x = mean(x)
  difference = y - mean.x
}

#Create a function to calculate median difference
med.diff <- function(df){
  x = as.numeric(df)
  result = median(x)
}

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

    `#Calculating molecular distance
distance <- apply(clean.merged, 1, mol.distance, grp = (1:40))
rownames(distance) <- colnames(clean.merged)

med.distance <- apply(distance, 1, med.diff)
med.distance <- round(med.distance, digits = 4)

distance1 <- cbind(med.distance, samp.name, iso.tube)
colnames(distance1) <- c('Molecular_Distance', 'Sample_Name', 'Isolation_Tube')

#Plot the result
dist.plot <- ggplot(as.data.frame(distance1), aes(Sample_Name, Molecular_Distance))
dist.plot + geom_bar(stat = 'identity', aes(fill = Isolation_Tube)) +
  ggtitle('Molecular Distance') + coord_flip()`

Как и ожидалось, результат колеблется около нуля со смешанными положительными и отрицательными значениями. Однако, когда я построил результат в виде столбчатой ​​диаграммы, он выглядел так: Как выглядит мой столбчатый график

Между тем, я ожидал чего-то более похожего: Как я этого ожидал выглядит как

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

1 Ответ

0 голосов
/ 01 августа 2020

Используя предоставленные данные и избегая samp.name и iso.tube, которых нет в сообщении, вот возможное решение:

#Data
clean.merged <- read.csv('clean.merged.csv')
#Functions
#Create a function to calculate molecular distance
mol.distance <- function(df, grp){
  x = df[grp]
  x = as.numeric(x)
  y = as.numeric(df)
  mean.x = mean(x)
  difference = y - mean.x
}

#Create a function to calculate median difference
med.diff <- function(df){
  x = as.numeric(df)
  result = median(x)
}

distance <- apply(clean.merged, 1, mol.distance, grp = (1:40))
rownames(distance) <- colnames(clean.merged)

med.distance <- apply(distance, 1, med.diff)
med.distance <- round(med.distance, digits = 4)

distance1 <- data.frame(med.distance)
colnames(distance1) <- c('Molecular_Distance')
distance1$Sample_Name <- rownames(distance1)

ggplot(distance1, aes(Sample_Name, Molecular_Distance))+ 
  geom_bar(stat = 'identity', fill='orange',color='black') +
  ggtitle('Molecular Distance') + coord_flip()

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

Я считаю, что проблема возникла из-за того, что данные не хранятся в фрейме данных. Я добавил это в код. Для отсутствующих переменных вы можете добавить в тот же фрейм данных distance1.

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