2012-12-22 69 views
6

當使用黑色背景的ggplot2主題時,是否可以控制除顏色指南之外的指南的圖例顏色,以便事物不會以黑色繪製?如果是這樣,怎麼樣?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") 

正如你所看到的,在傳說的形狀部分的默認顏色沒有發生改變,因此它是無形的,沒有人可以知道哪個品種是:

enter image description here

的我現在唯一的解決方案是更改legend.background顏色,但這是浪費墨水和醜陋。

+1

以下是部分修正:'+ guides(shape = guide_legend(override.aes = list(color =「white」)))'。不幸的是,'theme()'不能用來改變默認的點顏色。 – bdemarest

+0

感謝您的回覆(+1)。我認爲這值得添加一個答案:我肯定會讚揚它。 – MattBagg

回答

1

的一種方法是增加兩個額外geom_point S,邏輯是:

積白點的傳說,與沒有傳說中的黑點覆蓋它們,然後用沒有傳說中繪製的彩色點,e.g。

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

感謝您的回答! (爲什麼你需要黑色geom_point,因爲頂部的黑色geom_point無論如何都會覆蓋白色的?你有沒有注意到邊緣會顯示白色的情況?)...我希望有一種解決方案,在這個解決方案中改變主題不會迫使我們爲我們的代碼添加額外的圖層。 – MattBagg

+0

是的,當繪製點的不完整覆蓋率時,我注意到了。只要尺寸不同,它會好的,也許跳過黑色(如果你不希望被限制在你的着色點的點尺寸中,那麼黑點選項就在那裏) –

2

簡短的回答似乎是,沒有完美的方式來做到這一點。

根據我接受的@ user1317221_G的回答,我們可以添加帶有形狀指南的隱藏圖層。但它是額外的計算,如果我們保存爲PDF,我希望這些隱藏的層將出現。

或者,我們可以覆蓋字形引導的顏色,@bdemarest建議在意見:

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

但是,這仍然迫使我們添加特定主題代碼並不僅止於+ theme_black()

我已經實現了一個稍微更復雜的版本,因爲我爲會話設置了一個默認主題,具體取決於我是否爲紙張(灰色/白色背景)或屏幕(黑色背景)繪製圖。所以,我的做法是在會話運行初期沿着這些路線的東西:

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

後跟一個ggplot(),包括此:

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

這具有最小化主題 - 需要的優勢對繪圖進行特定的調整,儘管它不如用主題控制默認的ggplot2顏色。