ggplot2 plot sans axes, légendes, etc.

139

Je veux utiliser l'hexbin de bioconductor (ce que je peux faire) pour générer un tracé qui remplit toute la région d'affichage (png) - pas d'axes, pas d'étiquettes, pas d'arrière-plan, pas de nuthin '.

user1320487
la source
1
Ne serait-il pas plus facile de créer un graphique hexbin et de le recadrer dans un éditeur d'images?
joran
3
essayertheme_void()
Brian D

Réponses:

182

Selon mon commentaire dans la réponse de Chase, vous pouvez supprimer beaucoup de ces éléments en utilisant element_blank:

dat <- data.frame(x=runif(10),y=runif(10))

p <- ggplot(dat, aes(x=x, y=y)) + 
        geom_point() +
        scale_x_continuous(expand=c(0,0)) + 
        scale_y_continuous(expand=c(0,0))   

p + theme(axis.line=element_blank(),axis.text.x=element_blank(),
          axis.text.y=element_blank(),axis.ticks=element_blank(),
          axis.title.x=element_blank(),
          axis.title.y=element_blank(),legend.position="none",
          panel.background=element_blank(),panel.border=element_blank(),panel.grid.major=element_blank(),
          panel.grid.minor=element_blank(),plot.background=element_blank())

Il semble qu'il y ait encore une petite marge autour du bord du .png résultant lorsque j'enregistre ceci. Peut-être que quelqu'un d'autre sait comment supprimer même ce composant.

(Note historique: depuis la version 0.9.2 de ggplot2 , optsest obsolète. À la place, utilisez theme()et remplacez theme_blank()par element_blank().)

joran
la source
1
Merci beaucoup! J'ai également trouvé une solution similaire sur groups.google.com/group/ggplot2/browse_thread/thread/…
user1320487
Commentaire en passant: Dans certains cas, theme(axis.ticks=element_blank())ne fonctionne pas aussi bien que theme(axis.ticks.x=element_blank()), probablement un bug temporaire quelque part (j'ai mon propre jeu de thèmes, puis j'essaye de remplacer: seulement axis.ticks.xet axis.ticks.yfaire le travail.)
PatrickT
106

Re: changer le thème, etc. (pour les paresseux):

theme(axis.line=element_blank(),
      axis.text.x=element_blank(),
      axis.text.y=element_blank(),
      axis.ticks=element_blank(),
      axis.title.x=element_blank(),
      axis.title.y=element_blank(),
      legend.position="none",
      panel.background=element_blank(),
      panel.border=element_blank(),
      panel.grid.major=element_blank(),
      panel.grid.minor=element_blank(),
      plot.background=element_blank())
mbjoseph
la source
59

Les réponses actuelles sont soit incomplètes, soit inefficaces. Voici (peut-être) le moyen le plus court d'atteindre le résultat (en utilisant theme_void():

data(diamonds) # Data example
ggplot(data = diamonds, mapping = aes(x = clarity)) + geom_bar(aes(fill = cut)) +
      theme_void() + theme(legend.position="none")

Le résultat est:

entrez la description de l'image ici


Si vous souhaitez simplement éliminer les étiquettes , faites labs(x="", y="")-le:

ggplot(data = diamonds, mapping = aes(x = clarity)) + geom_bar(aes(fill = cut)) + 
      labs(x="", y="")
Luchonacho
la source
ggplot(data = diamonds, mapping = aes(x = clarity)) + geom_bar(aes(fill = cut)) + theme_void() + theme(legend.position="none", panel.background = element_rect(fill="grey80"), plot.background = element_rect(fill="red"))suggère que ce n'est pas 100% nul
baptiste
Les laboratoires (x = "", y = "") ne semblent pas supprimer les axes, juste les étiquettes.
miratrix
@miratrix désolé, mon erreur. Actualisé.
luchonacho
5
@luchonacho Utiliser labs(x="",y="")laisse de l'espace pour les titres des axes car en fait il y a des titres, ils sont juste sans signes. Pour supprimer les titres des axes et l'espace pour eux, il est préférable d'utiliser+ theme(axis.title = element_blank())
Didzis Elferts
6
labs(x = NULL)ou xlab(NULL)sont d'autres moyens.
PatrickT
42
'opts' is deprecated.

en cours d' ggplot2 >= 0.9.2utilisation

p + theme(legend.position = "none") 
Jonas Stein
la source
6
Je sais que vous n'avez pas encore de privilèges d'édition, mais si vous repérez d'autres réponses ggplot2 qui doivent être mises à jour, re: opts (), n'hésitez pas à suggérer une modification. Je recevrai une notification et je pourrai l'intégrer moi-même.
joran
3
xy <- data.frame(x=1:10, y=10:1)
plot <- ggplot(data = xy)+geom_point(aes(x = x, y = y))
plot
panel = grid.get("panel-3-3")

grid.newpage()
pushViewport(viewport(w=1, h=1, name="layout"))
pushViewport(viewport(w=1, h=1, name="panel-3-3"))
upViewport(1)
upViewport(1)
grid.draw(panel)
Amaurel
la source
Error in UseMethod("grid.draw") : no applicable method for 'grid.draw' applied to an object of class "NULL"
Roman Luštrik
grid.ls () affiche la liste des objets
viewport
il semble que dans une autre version de ggplot que j'utilise le nom du panneau est différent
amaurel
xy <- data.frame (x = 1: 10, y = 10: 1) plot <- ggplot (data = xy) + geom_point (aes (x = x, y = y)) plot panel = grid.get (" panel-3-4 ") grid.newpage () pushViewport (viewport (w = 1, h = 1, name =" layout ")) pushViewport (viewport (w = 1, h = 1, name =" panel-3- 4 ")) upViewport (1) upViewport (1) grid.draw (panel)
amaurel
-1

Est-ce que cela fait ce que vous voulez?

 p <- ggplot(myData, aes(foo, bar)) + geom_whateverGeomYouWant(more = options) +
 p + scale_x_continuous(expand=c(0,0)) + 
 scale_y_continuous(expand=c(0,0)) +
 opts(legend.position = "none")
Chasse
la source
se débarrasse de la légende mais les axes x et y et la grille d'arrière-plan sont toujours là.
user1320487