J'essaie de redimensionner un tracé pour qu'il corresponde à mon document, mais j'ai du mal à faire en sorte que le diagramme tracé soit un carré.
Exemple:
pdf(file = "./out.pdf", width = 5, height = 5)
p <- ggplot(mydata, aes(x = col1, y = col2))
print(p)
aux <- dev.off()
Bien que les limites pour x et y soient identiques, le tracé du résultat n'est pas carré. Je suppose que R fait le panneau englobant 5x5 "mais ne se soucie pas de la taille réelle du diagramme.
Comment puis-je nsquash mes diagrammes?
Dans ggplot
, le mécanisme permettant de conserver les proportions de votre tracé consiste à ajouter un calque coord_fixed()
au tracé. Cela préservera les proportions du tracé lui-même, quelle que soit la forme du cadre de sélection.
(Je vous suggère également d'utiliser ggsave
pour enregistrer votre tracé obtenu au format pdf/png/etc, plutôt que la séquence pdf(); print(p); dev.off()
.)
library(ggplot2)
df <- data.frame(
x = runif(100, 0, 5),
y = runif(100, 0, 5))
ggplot(df, aes(x=x, y=y)) + geom_point() + coord_fixed()
Pour garantir un rapport de forme particulier, par exemple pour square, utilisez theme(aspect.ratio=1)
.
La réponse d'Andrie ne donne pas une image complète, car l'exemple fournit peut-être des données non naturelles dans lesquelles la plage de x est égale à la plage de y. Si toutefois les données étaient:
df <- data.frame(
x = runif(100, 0, 50),
y = runif(100, 0, 5))
ggplot(df, aes(x=x, y=y)) + geom_point() + coord_fixed()
alors l'intrigue ressemblerait à ceci:
La fonction coord_fixed () a aussi un argument pour ajuster le ratio d'axes:
ratio
rapport d'aspect, exprimé par y/x
Pour que l'intrigue puisse être faite en carré avec:
ggplot(df, aes(x=x, y=y)) + geom_point() + coord_fixed(ratio=10)
Mais vous devez ajuster ceci avec les limites des variables ou de la zone de tracé (toutes les limites ne sont pas bien divisibles par des nombres entiers comme dans ces exemples).
Par souci d’exhaustivité: Si vous souhaitez prendre en compte des limites d’axe très différentes:
df <- data.frame(
x = runif(100, 0, 5000),
y = runif(100, 0, 5))
ratio.display <- 4/3
ratio.values <- (max(df$x)-min(df$x))/(max(df$y)-min(df$y))
plot <- ggplot(df, aes(x=x, y=y)) + geom_point()
plot + coord_fixed(ratio.values / ratio.display)
Résultant en: