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 '.


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().)


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())

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="")

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") 

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)

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")

se débarrasse de la légende mais les axes x et y et la grille d'arrière-plan sont toujours là.
— user1320487
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.