ggplot2 wykres bez osi, legend itp


139

Chcę użyć hexbin bioprzewodnika (co mogę zrobić), aby wygenerować wykres, który wypełni cały (png) region wyświetlania - bez osi, bez etykiet, bez tła, bez niczego.


1
Czy nie byłoby łatwiej utworzyć wykres hexbinowy i przyciąć go w edytorze obrazów?
joran

3
spróbujtheme_void()
Brian D

Odpowiedzi:


182

Zgodnie z moim komentarzem w odpowiedzi Chase'a, możesz usunąć wiele z tych rzeczy za pomocą 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())

Wygląda na to, że po zapisaniu tego pliku nadal jest mały margines wokół krawędzi wynikowego pliku .png. Być może ktoś inny wie, jak usunąć nawet ten element.

(Uwaga historyczna: Ponieważ ggplot2 wersji 0.9.2, optszostała zaniechana Zamiast używać. theme()I zastąpić theme_blank()z element_blank()).


1
Wielkie dzięki! Znalazłem też podobne rozwiązanie na groups.google.com/group/ggplot2/browse_thread/thread/ ...
user1320487

Komentarz na marginesie: W niektórych przypadkach theme(axis.ticks=element_blank())nie działa tak dobrze, jak theme(axis.ticks.x=element_blank()), prawdopodobnie gdzieś tymczasowy błąd (mam ustawiony własny motyw, potem próbuję go zastąpić: tylko axis.ticks.xi axis.ticks.ywykonuję zadanie).
PatrickT

106

Re: zmiana opcji na motyw itp (dla leniwych ludzi):

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

Aktualne odpowiedzi są niepełne lub nieskuteczne. Oto (być może) najkrótsza droga do osiągnięcia wyniku (przy użyciu theme_void():

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

Wynik jest taki:

wprowadź opis obrazu tutaj


Jeśli chcesz po prostu wyeliminować etykiety , labs(x="", y="")załatwia sprawę:

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"))sugeruje, że nie jest to w 100% nieważne
baptiste

Laboratorium (x = "", y = "") nie wydaje się usuwać osi, tylko etykiety.
miratrix

@miratrix przepraszam, mój błąd. Zaktualizowano.
luchonacho

5
@luchonacho Użycie labs(x="",y="")pozostawia miejsce na tytuły osi, ponieważ w rzeczywistości są tytuły, są one po prostu bez znaków. Aby usunąć tytuły osi i miejsce na nie, lepiej użyć+ theme(axis.title = element_blank())
Didzis Elferts

6
labs(x = NULL)czy xlab(NULL)są innymi sposobami.
PatrickT,

42
'opts' is deprecated.

w ggplot2 >= 0.9.2użyciu

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

6
Zdaję sobie sprawę, że nie masz jeszcze uprawnień do edycji, ale jeśli zauważysz inne moje odpowiedzi ggplot2, które wymagają aktualizacji re: opts (), możesz zasugerować zmianę. Otrzymam powiadomienie i będę mógł samodzielnie je włączyć.
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 () wyświetla listę rzutni i obiektów
grob

wygląda na to, że w innej wersji ggplot używam panelu nazwa jest inna
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

Czy to robi, co chcesz?

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

usuwa legendę, ale osie X i Y oraz siatka tła nadal tam są.
user1320487
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.