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.

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

Joran
quelle
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())
mbjoseph
quelle
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="")
Luchonacho
quelle
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") 
Jonas Stein
quelle
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)
Amaurel
quelle
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")
Verfolgungsjagd
quelle
Die Legende wird entfernt, aber die x- und y-Achse und das Hintergrundgitter sind noch vorhanden.
user1320487