2012-12-22 14 views
6

Podczas korzystania z motywu ggplot2 na czarnym tle, czy można kontrolować kolor legendy dla prowadnic innych niż prowadnice kolorów, aby rzeczy nie były drukowane na czarno? Jeśli tak to jak?Kolor kontrolny elementów legendy niebędących kolorowymi przewodnikami w ggplot

library(ggplot2) # needs to be 0.9.3 for this theme 
data(iris)  # included with ggplot2 

theme_black<- function (base_size = 16, base_family = ""){ 
    theme_minimal() %+replace% 
     theme(
       line = element_line(colour = "white", size = 0.5, linetype = 1, 
         lineend = "butt"), 
       rect = element_rect(fill = "white", 
         colour = "white", size = 0.5, linetype = 1), 
       text = element_text(family = base_family, 
         face = "plain", colour = "white", size = base_size, 
         angle = 0, lineheight = 0.9, hjust = 0, vjust = 0), 
       plot.background = element_rect(colour = 'black', fill = 'black'), 
       plot.title = element_text(size = rel(1.2)), 
       panel.border = element_rect(fill = NA, colour = "white"), 
       panel.grid.major = element_line(colour = "grey20", size = 0.2), 
       panel.grid.minor = element_line(colour = "grey5", size = 0.5), 
       strip.background = element_rect(fill = "grey30", colour = "grey30") 
      ) 
    } 

ggplot(data=iris, aes(x=Sepal.Length, y=Sepal.Width, shape=Species, 
     colour=Petal.Length))+geom_point()+theme_black()+ 
     scale_colour_gradient(low = "purple", high = "white") 

Jak widać, domyślny kolor dla części kształt legendy nie została zmieniona, więc jest niewidoczny i nie można powiedzieć, który gatunek jest która:

enter image description here

Jedynym rozwiązaniem, jakie mam teraz, jest zmiana koloru legend.background, ale jest to strata atramentu i brzydka.

+1

Oto częściowa poprawka: '+ guides (shape = guide_legend (override.aes ​​= list (color =" white ")))). Niestety, 'theme()' nie może być użyte do zmiany rzeczy, takich jak domyślny kolor punktu. – bdemarest

+0

Dziękuję za tę odpowiedź (+1). Myślę, że warto byłoby dodać jako odpowiedź: z pewnością bym go przegłosował. – MattBagg

Odpowiedz

1

Jednym ze sposobów byłoby dodanie dwóch dodatkowych geom_point s, logika będzie:

działka białe punkty na legendzie, pokryć je z czarnymi punktami bez legendy, a następnie wykreślić swoje kolorowe punkty bez legendy, np.

geom_point(colour="white",size=1) + 
geom_point(colour="black",size=3,show_guide=FALSE) + 
geom_point(show_guide=FALSE) 
+0

Dzięki za odpowiedź! (Dlaczego potrzebujesz czarnego geom_point, ponieważ ten pierwszy tak czy inaczej obejmuje biały?) Czy zauważyłeś przypadki, w których białe pokazy na krawędziach?) ... Mam nadzieję, że istnieje rozwiązanie, w którym zmiana motywów nie zmusza nas do dodaj dodatkowe warstwy do naszego kodu. – MattBagg

+0

tak, zauważyłem, kiedy wykreślam niepełne pokrycie punktów. Dopóki rozmiar jest inny, będzie ok i może pominie czarny (przypuszczam, że opcja czarnego punktu jest tam, jeśli nie chcesz być ograniczony w punktach dla twoich punktów) –

2

Krótka odpowiedź wydaje się, że nie ma idealnego sposobu, aby to zrobić.

Możemy dodawać ukryte warstwy za pomocą kształtów zgodnie z odpowiedzią @ user1317221_G, którą zaakceptowałem. Ale to jest dodatkowe obliczenie i jeśli zapisujemy jako pdf, oczekuję, że te ukryte warstwy będą obecne.

Alternatywnie, możemy zastąpić kolor prowadnicy kształt, tak jak @bdemarest sugeruje w komentarzach:

+ guides(shape=guide_legend(override.aes=list(colour="white")) 

Ale to wciąż zmusza nas, aby dodać kod motyw specyficzne poza tylko + theme_black()

Zaimplementowałem nieco bardziej rozbudowaną wersję tego, ponieważ ustawiam domyślny motyw sesji w zależności od tego, czy robię wykresy dla papieru (szare/białe tło) czy ekran (czarne tło). Tak więc moje podejście jest uruchomienie coś wzdłuż tych linii na początku sesji:

set_theme(theme_black); defaultcol = "white" # for slides 
# or 
set_theme(theme_bw); defaultcol = "black" # for paper 

następnie ggplot(), który zawiera to:

+ guides(shape=guide_legend(override.aes=list(colour=defaultcol)) 

Ma to tę zaletę, że minimalizuje potrzebę theme- specyficzne dostosowania działek, choć nie jest tak dobre, jak możliwość kontrolowania domyślnego koloru ggplot2 z motywem.

Powiązane problemy