2012-12-22 4 views
6

Wenn ein ggplot2-Design mit einem schwarzen Hintergrund verwendet wird, kann man die Legendenfarbe für Hilfslinien anders als die Farbhilfe steuern, so dass Dinge nicht schwarz geplottet werden? Wenn das so ist, wie?Steuerfarbe von Legendenelementen, die keine Farbhilfslinien sind in 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") 

Wie Sie sehen können, hat die Standardfarbe für die Form Teil der Legende nicht geändert worden, so dass es unsichtbar ist, und man kann nicht sagen, welche Art ist das:

enter image description here

Die Einzige Lösung, die ich jetzt habe, ist die Legende zu ändern. Hintergrundfarbe, aber das ist eine Verschwendung von Tinte und hässlich.

+1

Hier ist eine Teillösung: '+ guides (shape = guide_legend (override.aes ​​= list (color =" weiß ")))'. Leider kann 'theme()' nicht verwendet werden, um Dinge wie die Standardpunktfarbe zu ändern. – bdemarest

+0

Danke für diese Antwort (+1). Ich denke, es wäre es wert, als Antwort hinzugefügt zu werden: Ich würde es sicherlich aufwerten. – MattBagg

Antwort

1

Eine Möglichkeit wäre, zwei zusätzliche geom_point s hinzufügen, würde die Logik sein:

Plot weißen Punkte für die Legende, deckt sie mit schwarzen Punkten ohne Legende, dann zeichnen Sie Ihre farbigen Punkte ohne Legende, z.

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

Danke für die Antwort! (Warum brauchst du den schwarzen geom_point, da der obere sowieso den weißen deckt? Hast du Fälle bemerkt, bei denen Weiß an den Rändern zu sehen ist?) ... Ich hoffe, dass es eine Lösung gibt, in der wechselnde Themen uns nicht zwingen Fügen Sie unserem Code zusätzliche Layer hinzu. – MattBagg

+0

yeah ive bemerkte, wenn unvollständige Abdeckung der Punkte grafisch dargestellt wurde. Solange die Größe anders ist, wird es in Ordnung sein und vielleicht das Schwarze überspringen (ich nehme an, die Schwarzpunktoption ist dort, wenn Sie nicht in den Punktgrößen für Ihre Farbpunkte eingeschränkt sein wollen) –

2

Die kurze Antwort scheint zu sein, dass es keinen perfekten Weg gibt, dies zu tun.

Wir können versteckte Ebenen mit Formhilfslinien nach @ user1317221_G's Antwort hinzufügen, die ich akzeptierte. Aber es ist zusätzliche Berechnung und wenn wir als pdf speichern, erwarte ich, dass diese versteckten Schichten vorhanden sind.

Alternativ können wir die Form Führung der Farbe außer Kraft setzen, wie @bdemarest in den Kommentaren schlägt vor:

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

Aber das zwingt uns noch themenspezifischen Code darüber hinaus nur die + theme_black()

hinzufügen Ich habe eine etwas ausgefeiltere Version davon implementiert, weil ich ein Standardthema für die Sitzung einstelle, abhängig davon, ob ich Plots für Papier (grau/weißer Hintergrund) oder Bildschirm (schwarzer Hintergrund) mache. Also mein Ansatz ist etwas in dieser Richtung zu Beginn der Sitzung ausgeführt:

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

von einem ggplot gefolgt(), die dazu gehören:

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

Dies hat den Vorteil der Minimierung der Notwendigkeit von Themen- spezifische Anpassungen an Plots, obwohl es nicht so gut ist, als in der Lage zu sein, die Standardggplot2-Farbe mit einem Thema zu steuern.

Verwandte Themen