Общая информация
Я использую пакет ggplot2 в R для отображения некоторых данных, в которых я заинтересован в построении каждой строки моего фрейма данных в виде отдельной панели с использованием geom_col. Каждый столбец связан с группой, которая должна быть нанесена на один и тот же цвет, и поверх этого я бы хотел чередовать цвет фона, используя geom_rect, где фон будет охватывать несколько групп.
У меня также нетвыяснили, как построить фон без отдельного вызова geom_rect для каждого фона. В моем реальном примере мне нужно было бы выполнить 24 вызова geom_rect, и, несомненно, должен быть лучший способ (см. Попытку под заголовком " Пример geom_rect за один вызов ").
Ниже приведен мой код на некоторых тестовых данных, где он почти работает.
Я на самом деле вполне доволен результатом, но у меня есть две проблемы.
- Должен быть лучший способ вызова вызова geom_rect без потери порядка на оси x, поэтому решение под заголовком " Пример geom_rect за один вызов"пока не подходит для цели.
- Я хочу иметь возможность контролировать цвет полос для каждой группы. Обычно я использовал бы scale_fill_manual (values = c ("my_colors")), но это переопределяет цвет прямоугольников на заднем плане.
##Generate simul data
gene_list <- c("CHEK2", "AML", "TP53", "AKT1", "ATRX", "CDK4")
df <- data.frame(x = gene_list, y = rnorm(6))
df$grp <- c( rep(c(1),3), rep(c(2), 3) )
df$col <- c( rep(c("grey"),3), rep(c("blue"), 3) )
df_rec <- data.frame(xmin = c("CHEK2", "AKT1"), xmax = c("TP53", "CDK4"), ymin = c(-Inf, -Inf), ymax=c(Inf, Inf), col=c("red", "blue"))
##Reformat order
my_factor <- factor(gene_list, levels = gene_list)
df$x <- my_factor
##Create barplot
ggplot() +
geom_rect(data = df_rec,
aes(
fill=df_rec$col[1],
alpha=),
xmin = as.numeric(df$x[df$x == as.character(df_rec$xmin[1])]) - 0.45,
xmax = as.numeric(df$x[df$x == as.character(df_rec$xmax[1])]) + 0.55,
ymin = -Inf,
ymax = Inf) +
geom_rect(data = df_rec,
aes(
fill=df_rec$col[2],
alpha=1),
xmin = as.numeric(df$x[df$x == as.character(df_rec$xmin[2])]) - 0.45,
xmax = as.numeric(df$x[df$x == as.character(df_rec$xmax[2])]) + 0.45,
ymin = -Inf,
ymax = Inf) +
geom_col(df, mapping = aes(x = x, y=y, fill = as.character(grp)))
Пример geom_rect за один вызов
Использование тех же данных, которые указаны в приведенном выше коде.
Всякий раз, когда я пытался использовать df_rec, который имеет ограничения для каждого прямоугольника, я теряю порядок моих меток на оси x, контролирую раскраску прямоугольников и не могу настроить geom_rect xmin иПоложение xmax, как я делал в приведенном выше коде, без подсказки об ошибке " Дискретное значение передано в непрерывную шкалу "
(Отредактировано) Я забыл добавить, что установка уровней факторовпорядок, который я хочу для xmin и xmax, по-прежнему неправильно упорядочивает столбцы.
##Reformat order
my_factor <- factor(gene_list, levels = gene_list)
df$x <- my_factor
ggplot() +
geom_rect(data = df_rec,
aes(
alpha=1,
xmin = factor(df_rec$xmin, levels=levels(df$x)),
xmax = factor(df_rec$xmax, levels=levels(df$x)),
ymin = -Inf,
ymax = Inf),
fill = df_rec$col
) +
geom_col(df, mapping = aes(x = x, y=y), fill = df$col)
Спасибо всем, кто нашел время, чтобы посмотретьна это.