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.