Объедините два графика corre_polar с общей осью x и добавьте масштабную линейку оси x - PullRequest
1 голос
/ 13 июля 2020

I wi sh, чтобы создать один график, на котором один круговой график координаты_полярный находится внутри другого, разделяя ось x, но с разными осями y. Кроме того, я хотел бы добавить масштабную линейку внутри кругового графика, представляющего значения оси x. Вот некоторые тестовые данные:

library(dplyr)
library(ggplot2)

test_data <- data.frame(start = c(1, 200, 450, 600, 800),
                        end = c(150, 440, 570, 780, 1200),
                        gene_name = c("gene1", "gene2", "gene3", "gene4", "gene5"),
                        sample = 1,
                        gc = c(50.9, 49.8, 50.0, 51.0, 48.0)) %>%
  mutate(gene_length = end - start,
         pos = start + (gene_length/2)) %>%
  select(-gene_length)


p1 <- ggplot(test_data, aes(x = pos, y = gc)) +
  geom_col() +
  scale_y_continuous(limits = c(-60, 52)) +
  coord_polar()


p2 <- ggplot(test_data, aes(x = pos, fill = gene_name)) +
  geom_hline(aes(yintercept = sample + 0.4)) +
  geom_rect(aes(xmin = start, xmax = end, ymin = sample, ymax = sample + 0.8),
            color = "black",
            size = 0.01) +
  scale_y_continuous(limits = c(-10, 2)) +
  coord_polar()

p1

p1 looks like this

p2

p2 looks like this

What I want, is a plot that looks a bit like this (sorry for the terrible paint picture): введите описание изображения здесь

Черный цвет за пределами основного графика - это гистограмма, представленная p1. Я хочу, чтобы ширина каждой полосы соответствовала размеру соответствующего элемента на графике ниже. Я попытался объединить их с помощью таких инструментов, как cowplot или aplot, но ни один из них, похоже, не смог поместить их друг в друга. Вместо этого они скорее кладут их друг на друга.

1 Ответ

0 голосов
/ 13 июля 2020

Почему бы не поместить две геометрии в один сюжет вместо того, чтобы пытаться объединить два сюжета? Обратите внимание: чтобы подчеркнуть различия в gc

, я начал серые области с ymin = 47, но если вы хотите, вы можете вернуть их к 0 и иметь внутреннее кольцо с отрицательным значением y (поскольку его положение y в любом случае кажется произвольным).

p1 <- ggplot(test_data, aes(x = pos, y = gc)) +
  geom_rect(aes(xmin = start, xmax = end, ymin = 47, ymax = gc)) +
  geom_hline(aes(yintercept = sample + 0.4)) +
  geom_rect(aes(fill = gene_name, xmin = start, xmax = end, 
                ymin = sample, ymax = sample + 1),
            color = "black",
            size = 0.01) +
  scale_y_continuous(limits = c(30, 52)) +
  scale_x_continuous(limits = c(0, 1250)) +
  coord_polar()

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

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