Я обрабатываю набор данных это (внизу страницы) в R для проекта. Сначала я загружаю данные:
count_data <- read.table(file = "../data/GSE156388_read_counts.tsv", header = T, sep = "",
row.names = 1)
Затем я плавлю данные с помощью reshape2:
melted_count_data <- melt(count_data)
Затем я создаю коэффициент для раскрашивания графиков по группам:
color_groups <- factor(melted_count_data$variable, labels = rep(c("siTFIP11", "siGl3"), each = 3))
Теперь мы подошли к графику, который я пытаюсь сделать:
ggplot(melted_count_data, aes(x = variable, y = value / 1e6, fill = color_groups)) +
geom_bar(stat = "identity") + labs(title = "Read counts", y = "Sequencing depth (millions of reads)")
Проблема в том, что это создает барплот с кучей полос, что наводит меня на мысль, что он пытается сложить тонну баров друг на друга, а не просто создать один сплошной блок.
Я также хотел добавить метки данных на график:
+ geom_text(label = value / 1e6)
но это, казалось, просто положило кучу значений друг на друга.
Для проблемы со сложенными полосами я попытался использовать y = sum(values)
, но это просто сделало все полосы одинаковой высоты. Я также пытался использовать y = colSums(values)
, но это, очевидно, не сработало, потому что ему нужен «массив как минимум двух измерений».
Я пытался выяснить это, используя нерасплавленные данные, но безрезультатно.
Я просто отказался от этикеток, так как я даже не смог решить проблему с решеткой.
Обновлено:
Я нашел тему, предлагающую это:
ggplot(melted_count_data, aes(x = variable, y = value / 1e6, color = color_groups)) +
geom_bar(stat = "identity") + labs(title = "Read counts", y = "Sequencing depth (millions of reads)")
Замена fill
на color
. Это исправляет белые линии, но приводит к некоторым (меньшему количеству) черным линиям. Глядя на этот новый график, я думаю, что на самом деле это может быть наложение нескольких диаграмм друг на друга?
Вы можете сделать:
library(tidyverse)
url <- paste0( "https://www.ncbi.nlm.nih.gov/geo/download/",
"?acc=GSE156388&format=file&file=GSE156388%5",
"Fread%5Fcounts%2Etsv%2Egz")
tmpfile <- tempfile()
download.file(url, tmpfile)
count_data <- readr::read_tsv(gzfile(tmpfile),
show_col_types = FALSE)
count_data %>%
pivot_longer(-1) %>%
mutate(color_groups = factor(name,
labels = rep(c("siTFIP11", "siGl3"), each = 3))) %>%
group_by(name) %>%
summarise(value = sum(value)/1e6, color_groups = first(color_groups)) %>%
ggplot(aes(name, value, fill = color_groups)) +
geom_col() +
geom_text(aes(label = round(value, 2)), nudge_y = 0.5) +
labs(title = "Read counts", x = "", fill = "Type",
y = "Sequencing depth (millions of reads)") +
scale_fill_manual(values = c("gold", "deepskyblue3")) +
theme_minimal()
Created on 2022-03-21 by the reprex package (v2.0.1)
Я обновил код, чтобы он полностью воспроизводился. Предполагая, что у вас установлены tidyverse и readr, копирование и вставка приведенного выше кода в новый сеанс R загрузит файл, сохранит его во временном файле, прочитает в правильном формате, изменит его форму и начертит точно так же, как указано выше.
Теперь я вижу, что вызвало проблему. Когда я изначально загружал данные в таблицу, я использовал row.names = 1
, что все испортило. После удаления этого бита ваш первый ответ теперь тоже работает нормально. Спасибо за помощь!
Я попробовал это, но я получил эту ошибку
invalid 'labels'; length 6 should be 1 or 5
для этой строкиfactor(name, labels = rep(c("siTFIP11", "siGl3"), each = 3)))
. Я думаю, это потому, что переменная имени больше не включает «siTFIP11_1»?