Je peux combiner trois graphiques qui n'ont pas de légendes, mais quand j'ajoute des légendes à deux des graphiques, je ne peux pas les combiner. Comment puis-je combiner des graphiques avec légendes avec un graphique sans légende?
Voici un exemple de comment je combine des graphiques sans légendes:
library(ggplot2)
map_data <- data.frame(lon = c(-177.5, -172.5, -167.5, -162.5, -157.5, -152.5),
lat = c(87.5, 87.5, 87.5, 87.5, 87.5, 87.5),
ssta = c(-2.78999996, 0.09999999, 0.19999999, 0.06000000, 1.65999997, -0.41000000))
# un map
p.1 <- ggplot() +
borders("world",
colour="black",
fill="white") +
geom_tile(data = map_data,
aes(lon,
lat)) + # pas de valeur de remplissage donc pas de légende
coord_fixed() +
scale_fill_viridis(na.value = "transparent") +
theme_minimal()
# un deuxième map, de la même forme générale
p.2 <- p.1
# un graphique en ligne
library(lubridate)
time_sequence <- seq(dmy("01-01-1800"),
dmy("01-01-1960"),
by = 'month')
long_plot_data <- data.frame(variable = seq(dmy("01-01-1800"),
dmy("01-01-1960"),
by = 'month'),
value = runif(length(time_sequence)),
col = runif(length(time_sequence)))
p.3 <- ggplot(long_plot_data,
aes(variable,
value)) +
geom_line() +
theme_minimal()
# combiner les graphiques
library(grid)
grid.newpage()
grid.draw(rbind(ggplotGrob(p.1),
ggplotGrob(p.2),
ggplotGrob(p.3),
size = "last"))
Et maintenant si j'ajoute une valeur de remplissage aux graphiques de map, j'obtiens une légende et une erreur quand j'essaie de les combiner de la même manière:
# un map
p.1 <- ggplot() +
borders("world",
colour="black",
fill="white") +
geom_tile(data = map_data,
aes(lon,
lat,
fill = ssta)) + # donne une légende
coord_fixed() +
scale_fill_viridis(na.value = "transparent") +
theme_minimal()
Voici à quoi cela ressemble:
# un deuxième map, de la même forme générale
p.2 <- p.1
# un graphique en ligne
library(lubridate)
time_sequence <- seq(dmy("01-01-1800"),
dmy("01-01-1960"),
by = 'month')
long_plot_data <- data.frame(variable = seq(dmy("01-01-1800"),
dmy("01-01-1960"),
by = 'month'),
value = runif(length(time_sequence)),
col = runif(length(time_sequence)))
p.3 <- ggplot(long_plot_data,
aes(variable,
value)) +
geom_line() +
theme_minimal()
Maintenant j'essaie de combiner les deux cartes avec des légendes et le graphique en ligne sans légende:
# combiner les graphiques
library(grid)
grid.newpage()
grid.draw(rbind(ggplotGrob(p.1),
ggplotGrob(p.2),
ggplotGrob(p.3),
size = "last"))
La sortie est Erreur: ncol(x) == ncol(y) n'est pas TRUE
Mais si j'ajoute une légende au graphique en ligne, de sorte que les trois graphiques aient des légendes, je peux les combiner:
p.3 <- ggplot(long_plot_data,
aes(variable,
value,
colour = col)) +
geom_line() +
theme_minimal()
# combiner les graphiques
library(grid)
grid.newpage()
grid.draw(rbind(ggplotGrob(p.1),
ggplotGrob(p.2),
ggplotGrob(p.3),
size = "last"))
Comment puis-je combiner deux graphiques avec des légendes avec un sans légende?