2011-07-18 3 views

Odpowiedz

86

aby zmienić panelu kolor tła, należy użyć następującego kodu:

myplot + theme(panel.background = element_rect(fill = 'green', colour = 'red')) 

Aby zmienić kolor działki (ale nie w kolorze panelu), możesz:

myplot + theme(plot.background = element_rect(fill = 'green', colour = 'red')) 

Zobacz tutaj więcej informacji o motywach Quick reference sheet for legends, axes and themes.

+39

Istnieje również "theme_bw", co daje białe tło i szare linie siatki. Używam go cały czas, ponieważ w druku wygląda znacznie lepiej niż domyślne szare tło: 'myplot + theme_bw()' – ROLO

+0

@ROLO: Nice! Czy istnieje sposób zastosowania tego do wszystkich działek domyślnie? – krlmlr

+9

Umieść to na początku skryptu dla domyślnych B & W ggplots: 'ggplot <- function (...) { \t ggplot2 :: ggplot (...) + theme_bw() } ' – ROLO

44

aby uniknąć przestarzałe opts i theme_rect zastosowanie:

myplot + theme(panel.background = element_rect(fill='green', colour='red')) 

Aby zdefiniować swój własny temat, na podstawie theme_gray ale niektóre z wprowadzonych zmian i kilkoma dodatkami, w tym kontroli linia siatki kolor/rozmiar (więcej opcji dostępny grać z at ggplot2.org):

theme_jack <- function (base_size = 12, base_family = "") { 
    theme_gray(base_size = base_size, base_family = base_family) %+replace% 
     theme(
      axis.text = element_text(colour = "white"), 
      axis.title.x = element_text(colour = "pink", size=rel(3)), 
      axis.title.y = element_text(colour = "blue", angle=45), 
      panel.background = element_rect(fill="green"), 
      panel.grid.minor.y = element_line(size=3), 
      panel.grid.major = element_line(colour = "orange"), 
      plot.background = element_rect(fill="red") 
    ) 
} 

aby dokonać zwyczaj motyw domyślny kiedy ggplot nazywa się w przyszłości, bez maskowania:

theme_set(theme_jack()) 

Jeśli chcesz zmienić element aktualnie ustawionego motywu:

theme_update(plot.background = element_rect(fill="pink"), axis.title.x = element_text(colour = "red")) 

zapisać bieżącą domyślny motyw jako obiekt:

theme_pink <- theme_get() 

Zauważ, że theme_pink jest lista natomiast theme_jack była funkcją. Aby zwrócić motyw do tematu theme_jack, należy użyć theme_set(theme_jack()), natomiast aby powrócić do tematu theme_pink, należy użyć theme_set(theme_pink).

Możesz zastąpić theme_gray przez theme_bw w definicji theme_jack, jeśli wolisz. Dla własnych motyw przypominać theme_bw ale ze wszystkimi liniami siatki (x, y, większy i mniejszy) wyłączone:

theme_nogrid <- function (base_size = 12, base_family = "") { 
    theme_bw(base_size = base_size, base_family = base_family) %+replace% 
     theme(
      panel.grid = element_blank() 
    ) 
} 

Wreszcie bardziej radykalny motyw przydatna podczas drukowania choropleths lub inne mapy w ggplot, na podstawie dyskusji here ale zaktualizowany, aby uniknąć wycofania. Celem jest usunięcie szarego tła i wszelkich innych funkcji, które mogą odwrócić uwagę od mapy.

theme_map <- function (base_size = 12, base_family = "") { 
    theme_gray(base_size = base_size, base_family = base_family) %+replace% 
     theme(
      axis.line=element_blank(), 
      axis.text.x=element_blank(), 
      axis.text.y=element_blank(), 
      axis.ticks=element_blank(), 
      axis.ticks.length=unit(0.3, "lines"), 
      axis.ticks.margin=unit(0.5, "lines"), 
      axis.title.x=element_blank(), 
      axis.title.y=element_blank(), 
      legend.background=element_rect(fill="white", colour=NA), 
      legend.key=element_rect(colour="white"), 
      legend.key.size=unit(1.2, "lines"), 
      legend.position="right", 
      legend.text=element_text(size=rel(0.8)), 
      legend.title=element_text(size=rel(0.8), face="bold", hjust=0), 
      panel.background=element_blank(), 
      panel.border=element_blank(), 
      panel.grid.major=element_blank(), 
      panel.grid.minor=element_blank(), 
      panel.margin=unit(0, "lines"), 
      plot.background=element_blank(), 
      plot.margin=unit(c(1, 1, 0.5, 0.5), "lines"), 
      plot.title=element_text(size=rel(1.2)), 
      strip.background=element_rect(fill="grey90", colour="grey50"), 
      strip.text.x=element_text(size=rel(0.8)), 
      strip.text.y=element_text(size=rel(0.8), angle=-90) 
     ) 
} 
+1

To bardzo pomocne, dzięki. FYI, znalazłem argument 'plot.background' musi być przekazany do' tematu'. Pozostałe argumenty są opcjonalne. –