Ошибка при сборке графиков с помощью cowplot :: plot_grid

Я использую следующий код для создания диаграммы разброса анализа избыточности (RDA). График предназначен только для одного вида, и я провожу этот анализ для двух других видов (я не показываю код для двух других видов, поскольку он в основном тот же).

rda.plot.sap <- ggplot(df1, aes(x=RDA1, y=RDA2)) + 
  geom_point(aes(shape = df1[,"Enclos"], color = df1[,"Type_enclos"]), size = 2) +
  geom_hline(yintercept=0) + 
  geom_vline(xintercept=0) + 
  coord_fixed() + 
  scale_shape_manual(values = c(1, 19)) + 
  scale_color_manual(values=c('#999999','#E69F00'))  

rda.plot.sap <- rda.plot.sap + 
  geom_segment(data=df2, 
               aes(x=0, xend=RDA1, y=0, yend=RDA2), 
               color="red", arrow=arrow(length=unit(0.01,"npc")), size = 0.8) +
  geom_text(data=df2, 
            aes(x=RDA1, y=RDA2, label=rownames(df2), 
                hjust=0.5*(1-sign(RDA1)) + hjust_sap_x,
                vjust=0.5*(1-sign(RDA2) + vjust_sap_x)), 
            color="red", size=5)

rda.plot.sap <- rda.plot.sap + 
  geom_segment(data=df3, 
               aes(x=0, xend=RDA1, y=0, yend=RDA2), 
               color="blue", arrow=arrow(length=unit(0.01,"npc")), size = 0.8)+ 
  geom_text(data=df3, 
            aes(x=RDA1, y=RDA2, label=rownames(df3), 
                hjust=0.5*(1-sign(RDA1)),
                vjust=0.5*(1-sign(RDA2))), 
            color="blue", size=5)

rda.plot.sap <- rda.plot.sap + 
  theme(panel.background = element_blank(), 
        axis.title = element_text(size = 20), 
        axis.line.x = element_line(color="black", size = 1),
        axis.line.y = element_line(color="black", size = 1),
        axis.text = element_text(size = 15), 
        legend.title = element_blank(), 
        legend.text = element_text(size = 15),
        legend.key=element_blank(),
        legend.position = c(0.15, 0.9)) + 
  xlim(c(-0.6, 0.4))  

rda.plot.sap <- rda.plot.sap + 
  xlab(paste("RDA1 (", var.rda1, " % - p = ", p.rda1, ")", sep = "")) + 
  ylab(paste("RDA2 (", var.rda2, " % - p = ", p.rda2, ")", sep = ""))

Код работает отлично, и я получаю три отдельных графика без каких-либо ошибок или предупреждений. Проблема в том, что когда я пытаюсь собрать эти три графика с помощью функции plot_grid пакета cowplot:

final_plot <- plot_grid(rda.plot.sap, rda.plot.epi, rda.plot.het, 
                        nrow = 1, ncol = 3, labels = c("A", "B", "C"))  

Я всегда получаю одну и ту же простую ошибку:

«Ошибка: эстетика должна быть либо длиной 1, либо такой же, как данные (27): форма, цвет».

Еще более странно, что после получения этой ошибки, если я хочу снова запустить код одного из отдельных участков (только одного вида), я получаю ту же ошибку.

Это мой первый пост, поэтому я надеюсь, что достаточно точно описал проблему. Я не понимаю, что здесь происходит, поэтому заранее спасибо всем, кто может помочь.


person Julien Barrère    schedule 16.05.2019    source источник
comment
Добро пожаловать в Stack Overflow! Не могли бы вы сделать вашу проблему воспроизводимой, поделившись образцом своих данных, чтобы другие могли помочь (пожалуйста, не используйте str(), head() или снимки экрана)? Вы можете использовать reprex и _ 4_ пакеты, которые помогут вам в этом. См. Также Помогите мне помочь вам & Как создать отличный воспроизводимый пример R?   -  person Tung    schedule 16.05.2019
comment
На самом деле невозможно ответить на ваш вопрос без полностью воспроизводимого примера. Однако всякий раз, когда вы вводите данные в оператор aes() (как в aes(shape = df1[,"Enclos"], color = df1[,"Type_enclos"])), это признак того, что вы в корне не понимаете, как работает эстетическое отображение ggplot2. Я бы начал с чтения об этом, например: r4ds.had.co .nz / data-visualisation.html # aesthetic-mappings   -  person Claus Wilke    schedule 17.05.2019


Ответы (1)


Я не уверен, почему, но удаление аргумента labels из plot_grid() обычно исправляет это. (Вам просто нужно добавить метки к каждому графику отдельно с помощью geom_text() или ggtitle().)

person Lisa DeBruine    schedule 12.10.2020