Je voudrais reproduire l'intrigue immédiatement ci-dessous en utilisant ggplot2. Je peux m'approcher, mais je ne peux pas supprimer les bordures supérieure et droite. Ci-dessous, je présente plusieurs tentatives d'utilisation de ggplot2, y compris plusieurs suggestions trouvées sur ou via Stackoverflow. Malheureusement, je n'ai pas été en mesure de faire fonctionner ces suggestions.
J'espère que quelqu'un pourra corriger un ou plusieurs des extraits de code ci-dessous.
Merci pour vos suggestions.
# desired plot
a <- seq(1,20)
b <- a^0.25
plot(a,b, bty = "l")
library(ggplot2)
df <- as.data.frame(cbind(a,b))
# 1. ggplot2 default
ggplot(df, aes(x = a, y = b)) + geom_point()
# 2. removes background color
ggplot(df, aes(x = a, y = b)) + geom_point() + opts(panel.background = theme_rect(fill='white', colour='black'))
# 3. also removes gridlines
none <- theme_blank()
ggplot(df, aes(x = a, y = b)) + geom_point() + opts(panel.background = theme_rect(fill='white', colour='black')) + opts(panel.grid.major = none, panel.grid.minor = none)
# 4. does not remove top and right border
ggplot(df, aes(x = a, y = b)) + geom_point() + opts(panel.background = theme_rect(fill='white', colour='black')) + opts(panel.grid.major = none, panel.grid.minor = none) + opts(panel.border = none)
# 5. does not remove top and right border
ggplot(df, aes(x = a, y = b)) + geom_point() + opts(panel.background = theme_rect(fill='white', colour='black')) + opts(panel.grid.major = none, panel.grid.minor = none) + opts(axis.line = theme_segment())
# 6. removes x and y axis in addition to top and right border
# http://stackoverflow.com/questions/5458409/remove-top-and-right-border-from-ggplot2
ggplot(df, aes(x = a, y = b)) + geom_point() + opts(panel.background = theme_rect(fill='white', colour='black')) + opts(panel.grid.major = none, panel.grid.minor = none) + opts(panel.background=theme_rect(colour=NA))
# 7. returns error when attempting to remove top and right border
# https://groups.google.com/group/ggplot2/browse_thread/thread/f998d113638bf251
#
# Error in el(...) : could not find function "polylineGrob"
#
theme_L_border <- function(colour = "black", size = 1, linetype = 1) {
structure(
function(x = 0, y = 0, width = 1, height = 1, ...) {
polylineGrob(
x=c(x+width, x, x), y=c(y,y,y+height), ..., default.units = "npc",
gp=gpar(lwd=size, col=colour, lty=linetype),
)
},
class = "theme",
type = "box",
call = match.call()
)
}
ggplot(df, aes(x = a, y = b)) + geom_point() + opts(panel.background = theme_rect(fill='white', colour='black')) + opts(panel.grid.major = none, panel.grid.minor = none) + opts( panel.border = theme_L_border())
Réponses:
MODIFIER Ignorer cette réponse. Il y a maintenant de meilleures réponses. Voir les commentaires. Utilisation
+ theme_classic()
ÉDITER
Ceci est une meilleure version. Le bogue mentionné ci-dessous dans le message d'origine demeure (je pense). Mais la ligne d'axe est dessinée sous le panneau. Par conséquent, supprimez à la fois
panel.border
etpanel.background
pour voir les lignes d'axe.Message original Cela se rapproche. Il y avait un bug avec
axis.line
ne pas travailler sur l'axe y ( voir ici ), qui ne semble pas encore être corrigé. Par conséquent, après avoir supprimé la bordure du panneau, l'axe des y doit être dessiné séparément en utilisantgeom_vline
.Les points extrêmes sont découpés, mais le découpage peut être annulé en utilisant le code par baptiste .
Ou utilisez
limits
pour déplacer les limites du panneau.la source
Les mises à jour récentes de ggplot (0.9.2+) ont remanié la syntaxe des thèmes. Plus particulièrement,
opts()
est désormais obsolète, ayant été remplacé partheme()
. La réponse de Sandy générera toujours (à partir de janvier 12) un graphique, mais amènera R à lancer un tas d'avertissements.Voici le code mis à jour reflétant la syntaxe actuelle de ggplot:
génère:
la source
Une alternative à
theme_classic()
est le thème fourni avec le package cowplot ,theme_cowplot()
(chargé automatiquement avec le package). Il ressemble àtheme_classic()
, avec quelques différences subtiles. Plus important encore, les tailles d'étiquettes par défaut sont plus grandes, de sorte que les chiffres résultants peuvent être utilisés dans les publications sans autre modification nécessaire (en particulier si vous les enregistrez avecsave_plot()
au lieu deggsave()
). De plus, l'arrière-plan est transparent et non blanc, ce qui peut être utile si vous souhaitez modifier la figure dans Illustrator. Enfin, à mon avis, les graphiques à facettes sont plus beaux.Exemple:
Voici à quoi ressemble le fichier
plot.png
produit par ce code:Avertissement: je suis l'auteur du package.
la source
J'ai suivi la réponse d'Andrew , mais j'ai également dû suivre https://stackoverflow.com/a/35833548 et définir les axes x et y séparément en raison d'un bogue dans ma version de ggplot (v2.1.0).
Au lieu de
j'ai utilisé
la source
Les options ci-dessus ne fonctionnent pas pour les cartes créées avec
sf
etgeom_sf()
. Par conséquent, je veux ajouter lendiscr
paramètre pertinent ici. Cela créera une belle carte propre ne montrant que les fonctionnalités.la source
La simplification de la réponse d'Andrew ci-dessus conduit à ce thème clé pour générer la demi-frontière.
la source
Voici une réponse extrêmement simple
C'est si facile. Source: la fin de cet article
la source