R: Как получить график рассеяния из матричных данных с дискретной осью х - PullRequest
0 голосов
/ 19 июня 2019

Я довольно новичок в R и кодировании, поэтому я не знаю, как объяснить это на этом сайте, но я не смог найти лучшего форума, чтобы спросить.
По сути, у меня есть матрица 6x6, где каждая строка представляет собой дискретный ген, а каждый столбец представляет собой образец.
Я хочу, чтобы гены в качестве осей х и оси у были значениями образцов, чтобы у каждого гена было 6 образцов выше при их соответствующем значении.
У меня есть эта матрица в Excel, и когда я выделяю ее и строю график, она дает именно то, что я хочу.
Но попытка дублировать его в R дает в лучшем случае гигантский решетчатый график.

Я пробовал boxplot(), scatterchart(), plot() и ggplot().
Я предполагаю, что должен изменить свою матрицу, но я не знаю как.

Ответы [ 2 ]

1 голос
/ 19 июня 2019

это может помочь:

library(tidyverse)


gene <- c("a", "b", "c", "d", "e", "f")
x1 <- c(1,2,3,4,5,6)
x2 <- c(2,3,4,5,-6,7)
x3 <- c(3,4,5,6,7,8)
x4 <- c(4,-5,6,7,8,9)
x5 <- c(9,8,7,6,5,4)
x6 <- c(5,4,3,2,-1,0)

df <- data.frame(gene, x1, x2, x3, x4, x5, x6) #creates data.frame
as_tibble(df) # convenient way to check data.frame values and column format types
df <- df %>% gather(sample, observation, 2:7) # here's the conversion to long format
as_tibble(df)  #watch df change

#example plots

p1 <- ggplot(df, aes(x = gene, y = observation, color = sample)) + geom_point()
p1
p2 <- ggplot(df, aes(x = gene, y = observation, group = sample, color = sample)) +
                 geom_line()
p2
p3 <- p2 + geom_point()
p3
0 голосов
/ 19 июня 2019

Это очень легко решить - если ваша матрица 6x6 с одним геном на строку и одним наблюдением на столбец (таким образом, шесть наблюдений на ген), вам сначала нужно сделать ее длинным форматом (36 строк) - с таким простым форматом это может быть сделано с использованием unlist - и затем нанесение этого на вектор чисел для представления генов:

# Here I make some dummy data - a 6x6 matrix of random numbers:
df1 <- matrix(rnorm(36,0,1), ncol = 6)

# To help show which way the data unlists, and make the 
#   genes different, I add 4 to gene 1:
df1[1,] <- df1[1,] + 4

#### TL;DR - HERE IS THE SOULTION ####
# Then plot it, using rep to make the x-axis data vector
plot(x = rep(1:6, times = 6), y = unlist(df1))

Чтобы улучшить читабельность, добавьте метки оси:

# With axis labels
plot(x = rep(1:6, times = 6), y = unlist(df1), 
  xlab = 'Gene', ylab = 'Value')

enter image description here

Вы также можете использовать ggplot с эстетикой geom_point или geom_jitter - например:

ggplot() +
  geom_jitter(mapping = aes(x = rep(1:6, times = 6), y = as.numeric(unlist(data.frame(df1)))))

enter image description here

Обратите внимание, что вы также можете создать эффект "джиттера" в базе R, используя rnorm() для значений x, настраивая величину джиттера с последним аргументом функции rnorm():

plot(x = rep(1:6, times = 6) + rnorm(36, 0, 0.05), y = unlist(df1), xlab = 'Gene', ylab = 'Value')

enter image description here

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