Je pense que cela devrait être évident… tout ce que j'essaie de faire est de supprimer l'axe des x du bas de mon graphique et de l'ajouter en haut.
Voici un exemple reproductible. Données plus code pour faire le graphique suivant:
library(reshape2)
library(ggplot2)
data(mtcars)
dat <- with(mtcars, data.frame(mpg, cyl, disp, hp, wt, gear))
cor.matrix <- round(cor(dat, use = "pairwise.complete.obs", method = "spearman"), digits = 2)
diag(cor.matrix)<-NA
cor.dat <- melt(cor.matrix)
cor.dat <- data.frame(cor.dat)
cor.dat <- cor.dat[complete.cases(cor.dat),]
ggplot(cor.dat, aes(Var2, Var1, fill = value)) +
geom_tile(colour="gray90", size=1.5, stat="identity") +
geom_text(data=cor.dat, aes(Var2, Var1, label = value), color="black", size=rel(4.5)) +
scale_fill_gradient(low = "white", high = "dodgerblue", space = "Lab", na.value = "gray90", guide = "colourbar") +
scale_x_discrete(expand = c(0, 0)) +
scale_y_discrete(expand = c(0, 0)) +
xlab("") +
ylab("") +
theme(panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_rect(fill=NA,color="gray90", size=0.5, linetype="solid"),
axis.line = element_blank(),
axis.ticks = element_blank(),
panel.background = element_rect(fill="gray90"),
plot.background = element_rect(fill="gray90"),
legend.position = "none",
axis.text = element_text(color="black", size=14) )
Mais ce que j'essaie de produire est- il semble que cela devrait être évident (par exemple, c'est très facile à faire en base-R), mais je n'ai pas réussi à trouver ce que je cherche dans ggplot2.
Vous pouvez déplacer les étiquettes de l'axe des x vers le haut en ajoutant
scale_x_discrete(position = "top")
J'ai utilisé ce travail autour. Utilisé un duplicata de l'axe des x de la parcelle et apposé les deux ensemble, puis rogner. Je n'ai pas le code nettoyé, mais ci-dessous est un exemple.
p.bot <-
ggplot(cor.dat, aes(Var2, Var1, fill = value)) +
geom_tile(colour="gray90", size=1.5, stat="identity") +
geom_text(data=cor.dat, aes(Var2, Var1, label = value), color="black", size=rel(4.5)) +
scale_fill_gradient(low = "white", high = "dodgerblue", space = "Lab", na.value = "gray90", guide = "colourbar") +
scale_x_discrete(expand = c(0, 0)) +
scale_y_discrete(expand = c(0, 0)) +
xlab("") +
ylab("") +
theme(panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_rect(fill=NA,color="gray90", size=0.5, linetype="solid"),
axis.line = element_blank(),
axis.ticks = element_blank(),
panel.background = element_rect(fill="gray90"),
plot.background = element_rect(fill="gray90"),
legend.position = "none",
axis.text.x = element_blank(),
plot.margin = unit(c(1,0,0,0), "cm"),
axis.text.y = element_text(color="black", size=14) )
p.top <- p.bot + theme(
axis.text.x = element_text(color="black", size=14),
axis.text.y = element_text(color="gray90", size=14)
) + coord_cartesian(ylim = c(0,0))
require(gtable)
#Extract Grobs
g1<-ggplotGrob(p.top)
g2<-ggplotGrob(p.bot)
#Bind the tables
g<-gtable:::rbind_gtable(g1, g2, "first")
#Remove a row between the plots
g <- gtable_add_rows(g, unit(-1.25,"cm"), pos=nrow(g1))
#draw
panels <- g$layout$t[grep("panel", g$layout$name)]
g$heights[panels] <- lapply(c(0,2), unit, "null")
grid.newpage()
grid.draw(g)
découvrez le package cowplot
ggdraw(switch_axis_position(p + axis = 'x'))
voir http://ggplot2.tidyverse.org/reference/sec_axis.html
scale_y_continuous(sec.axis = dup_axis())