Сложность в организации участков - PullRequest
2 голосов
/ 02 апреля 2020

У меня всего 7 участков. Шесть из них представляют собой линейные диаграммы, которые должны быть выровнены и расположены один под другим так, чтобы между ними не было места - для создания одного составного графика.

Вот данные и код ggplot2, и я использую одна и та же линейная диаграмма 6 раз, просто чтобы объяснить мою проблему

x<- 1:10

y<- rnorm(10)

data <- data.frame(x,y)


library(ggplot2)
k<- ggplot(data, aes(x= x, y= y)) + geom_line() +  theme(panel.background=element_blank()) + theme(aspect.ratio = 0.15) + theme(panel.grid.minor = element_blank(), panel.grid.major = element_blank(), axis.line.x = element_line(colour = "black", size= 0.5), axis.line.y = element_line(colour = "black", size= 0.5), axis.ticks.y = element_line(colour = "black", size= 0.5), axis.ticks.x = element_blank()) + xlab(label = "")+ ylab(label = "") + scale_x_continuous(label= NULL) +theme(plot.margin = unit(c(-0.25, 2, -0.25, 2), "cm"))
k 

Седьмой график рассеяния с линией регрессии

a<- 1:10
a

b<- 11:20
b

data1 <- data.frame(a,b)
data1

library(ggplot2)
k3<-ggplot(data1, aes(x=a, y=b))+ geom_point(shape=1, fill ="black", alpha= 1, color= "black", size=3) + geom_smooth(method = lm, size = 0.5, linetype ="dotted", fill ="black", color= "black", alpha = 0.3)
k3

k3<- k3 + expand_limits(x = c(0.5, 10.5), y = c(10.5,20.5)) +  scale_x_continuous(expand = c(0, 0), breaks = c(2,4, 6, 8, 10)) + scale_y_continuous(expand = c(0, 0),breaks = c(10, 12, 14, 16, 18, 20)) 
k3

k3 <- k3 +  theme(panel.background=element_blank())+ theme(aspect.ratio = 1) + theme(panel.grid.minor = element_blank(), panel.grid.major = element_blank(), axis.line.x = element_line(colour = "black"), axis.line.y = element_line(colour = "black", size= 0.5), axis.ticks.y = element_line(colour = "black", size= 0.5), axis.ticks.x = element_line(colour = "black", size= 0.5)) 
k3

k3<- k3 + scale_x_reverse(expand = c(0, 0)) 
k3

#Flip axes 
k3<- k3 + coord_flip() 
k3<- k3 + theme(plot.margin = unit(c(0, 0, 0, 0), "cm"))
k3

Я хочу организовать (1) составной график (слева) и ( 2) график рассеяния (справа) рядом. Поэтому я попытался организовать это, используя (1) ggarrange () [в ggpubr] и ​​(2) plot_grid () [в cowplot], но не смог.

Может кто-нибудь помочь? Спасибо!

Я хочу, чтобы макет выглядел следующим образом

layout

Ответы [ 2 ]

1 голос
/ 04 апреля 2020

Нашли решение! Получил желаемый результат с пакетом 'лоскутное одеяло' в сочетании с некоторыми изменениями полей графика.

Вот код и результат

library(ggplot2)

iris 

# Line charts 
k <- ggplot(iris, aes(x = Sepal.Length, y = Petal.Length)) +
  geom_line() +
  labs(x = "", y = "") +
  theme_classic() +
  theme(axis.ticks.x = element_blank(),
        axis.text.x = element_blank(),
        axis.text.y = element_blank(),
        axis.ticks.y = element_blank()) + 
  theme(plot.margin = unit(c(-0.25,-3,-0.25,0), "cm")) + 
  theme(aspect.ratio = 0.15)

# Line chart (k4) with y-axis label
k4 <- ggplot(iris, aes(x = Sepal.Length, y = Petal.Length)) +
  geom_line() +
  labs(x = "", y = "") +
  theme_classic() +
  theme(axis.ticks.x = element_blank(),
        axis.text.x = element_blank(),
        axis.text.y = element_blank(),
        axis.ticks.y = element_blank()) +
  theme(axis.title.y = element_text(
    vjust = 2,
    color = "black",
    size = 10,
    face = "bold"
  ))+ 
  theme(plot.margin = unit(c(-0.25,-3,-0.25,0), "cm"))+ 
  theme(aspect.ratio = 0.15)

# scatter plot
sc <-ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width)) +
  geom_point() +
  labs(x = "", y = "") +
  theme_classic()+
  theme(plot.margin = unit(c(0,0,0,-0.5), "cm"))+
  theme(aspect.ratio = 0.7) 
sc

library(patchwork)

p<- (k/k/k/k4/k/k)| sc
p


Result

1 голос
/ 02 апреля 2020

Очень надеюсь, что правильно вас понял. Честно говоря, ваш код беспорядок, поэтому я использовал набор данных iris по умолчанию.

Подсказка - дважды использовать plot_grid:

library(ggplot2)
library(cowplot)

k <- iris %>% 
  ggplot(aes(x = Sepal.Length, y = Petal.Length)) +
  geom_line() +
  labs(x = "", y = "") +
  theme_classic() +
  theme(axis.ticks.x = element_blank(),
        axis.text.x = element_blank(),
        axis.text.y = element_blank(),
        axis.ticks.y = element_blank())

k3 <- iris %>% 
  ggplot(aes(x = Sepal.Length, y = Sepal.Width)) +
  geom_point() +
  labs(x = "", y = "") +
  theme_classic()

grid1 <- cowplot::plot_grid(
  k, k, k, k, k, k,
  ncol = 1,
  align = "hv"
)

cowplot::plot_grid(grid1, k3, 
                   align = "hv",
                   rel_widths = c(1.5, 1), # you can control the relative width and height
                   nrow = 1)

enter image description here

...