ggplot2-Plot ohne Achsen, Legenden usw.


138

Ich möchte das Hexbin des Bioleiters verwenden (was ich tun kann), um ein Diagramm zu erstellen, das den gesamten (PNG-) Anzeigebereich ausfüllt - keine Achsen, keine Beschriftungen, kein Hintergrund, kein Nuthin.


1
Wäre es nicht einfacher, ein Hexbin-Diagramm zu erstellen und es in einem Bildeditor zuzuschneiden?
Joran

3
versuchentheme_void()
Brian D

Antworten:


182

Gemäß meinem Kommentar in Chases Antwort können Sie viele dieser Dinge entfernen, indem Sie 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())

Es sieht so aus, als ob sich am Rand der resultierenden .png noch ein kleiner Rand befindet, wenn ich dies speichere. Vielleicht weiß jemand anderes, wie man sogar diese Komponente entfernt.

(Historische Anmerkung: Seit ggplot2 Version 0.9.2, optsist veraltet Stattdessen verwenden. theme()Und ersetzen theme_blank()mit element_blank().)


1
Danke vielmals! Ich habe auch eine ähnliche Lösung unter groups.google.com/group/ggplot2/browse_thread/thread/… gefunden
user1320487

Kommentar im Vorbeigehen: In einigen Fällen theme(axis.ticks=element_blank())funktioniert es nicht so gut wie theme(axis.ticks.x=element_blank())wahrscheinlich ein vorübergehender Fehler irgendwo (ich habe mein eigenes Themenset, dann versuche ich zu überschreiben: nur axis.ticks.xund axis.ticks.ymache den Job.)
PatrickT

106

Betreff: Ändern der Optionen zum Thema usw. (für faule Leute):

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

Aktuelle Antworten sind entweder unvollständig oder ineffizient. Hier ist (vielleicht) der kürzeste Weg, um das Ergebnis zu erzielen (mit theme_void():

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

Das Ergebnis ist:

Geben Sie hier die Bildbeschreibung ein


Wenn Sie nur die Etiketten entfernen möchten , gehen Sie wie labs(x="", y="")folgt vor:

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"))schlägt vor, dass es nicht 100% nichtig ist
baptiste

Die Labore (x = "", y = "") scheinen nicht die Achsen zu entfernen, sondern nur die Beschriftungen.
Miratrix

@miratrix sorry, mein fehler. Aktualisiert.
Luchonacho

5
@luchonacho Bei Verwendung von labs(x="",y="")lässt Leerzeichen von Achsentiteln, da es tatsächlich Titel gibt, die nur ohne Vorzeichen sind. Um + theme(axis.title = element_blank())
Achsentitel

6
labs(x = NULL)oder xlab(NULL)sind andere Wege.
PatrickT

42
'opts' is deprecated.

in ggplot2 >= 0.9.2Gebrauch

p + theme(legend.position = "none") 

6
Mir ist klar, dass Sie noch keine Bearbeitungsrechte haben, aber wenn Sie andere ggplot2-Antworten von mir finden, die aktualisiert werden müssen, können Sie eine Änderung vorschlagen. Ich werde eine Benachrichtigung erhalten und kann sie selbst einbinden.
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 () zeigt die Liste der Ansichtsfenster- und Grobobjekte an
amaurel

Es scheint, dass in anderen Versionen von ggplot, dass ich den Panel-Namen verwende, anders ist
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 (Ansichtsfenster (w = 1, h = 1, name =" layout ")) pushViewport (Ansichtsfenster (w = 1, h = 1, name =" panel-3- 4 ")) upViewport (1) upViewport (1) grid.draw (panel)
amaurel

-1

Macht das was du willst?

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

Die Legende wird entfernt, aber die x- und y-Achse und das Hintergrundgitter sind noch vorhanden.
user1320487
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.