2012-12-22 26 views
6

Khi sử dụng chủ đề ggplot2 với nền đen, có thể điều khiển màu huyền thoại cho hướng dẫn khác với hướng dẫn màu để mọi thứ không được tô màu đen? Nếu vậy, làm thế nào?Kiểm soát màu của các phần tử chú giải không phải là hướng dẫn màu trong 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") 

Như bạn thấy, màu sắc mặc định cho phần hình dạng của các huyền thoại đã không được thay đổi, vì vậy nó là vô hình và người ta không thể khẳng định loài nào là đó:

enter image description here

Các chỉ có giải pháp tôi có ngay bây giờ là thay đổi màu sắc huyền thoại.background, nhưng đây là một sự lãng phí mực và xấu xí.

+1

Đây là bản sửa lỗi từng phần: '+ hướng dẫn (hình dạng = guide_legend (ghi đè lên.aes = danh sách (màu =" trắng ")))'. Thật không may, 'theme()' không thể được sử dụng để thay đổi những thứ như màu điểm mặc định. – bdemarest

+0

Cảm ơn phản hồi này (+1). Tôi nghĩ rằng nó sẽ có giá trị thêm như là một câu trả lời: Tôi chắc chắn sẽ upvote nó. – MattBagg

Trả lời

1

Một cách sẽ có thêm hai phụ geom_point s, logic sẽ là:

âm mưu điểm trắng cho huyền thoại, bao che chúng với điểm đen không có truyền thuyết, sau đó vẽ điểm màu của bạn không có truyền thuyết, ví dụ.

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

Cảm ơn bạn đã trả lời! (Tại sao bạn sẽ cần geom_point đen kể từ đầu một bao gồm các màu trắng không? Bạn có nhận thấy trường hợp trắng hiển thị trên các cạnh?) ... Tôi hy vọng rằng có một giải pháp trong đó thay đổi chủ đề không ép buộc chúng ta thêm các lớp bổ sung vào mã của chúng tôi. – MattBagg

+0

yeah ive nhận thấy khi vẽ sơ đồ trang bị đầy đủ các điểm. Miễn là kích thước là khác nhau nó sẽ là ok và có thể bỏ qua màu đen (tôi cho rằng tùy chọn điểm đen là có nếu bạn không muốn bị hạn chế trong các kích thước điểm cho các điểm coloued của bạn) –

2

Câu trả lời ngắn có vẻ là không có cách nào hoàn hảo để thực hiện việc này.

Chúng tôi có thể thêm các lớp ẩn với hướng dẫn hình dạng theo câu trả lời của @ user1317221_G, mà tôi đã chấp nhận. Nhưng đó là tính toán bổ sung và nếu chúng tôi lưu dưới dạng pdf, tôi hy vọng các lớp ẩn này sẽ có mặt.

Ngoài ra, chúng ta có thể ghi đè lên màu hướng dẫn hình dạng, như @bdemarest gợi ý trong ý kiến:

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

Nhưng điều này vẫn khiến chúng ta phải thêm mã chủ đề cụ thể vượt quá chỉ là + theme_black()

Tôi đã thực hiện một phiên bản phức tạp hơn một chút về điều này bởi vì tôi thiết lập một chủ đề mặc định cho phiên tùy thuộc vào việc tôi đang vẽ đồ thị cho giấy (nền xám/trắng) hay màn hình (nền đen). Vì vậy, cách tiếp cận của tôi là để chạy một cái gì đó dọc theo những dòng đầu trong phiên:

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

theo sau là một ggplot() trong đó bao gồm này:

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

này có lợi thế là giảm thiểu nhu cầu theme- điều chỉnh cụ thể cho lô đất, mặc dù nó không tốt bằng việc có thể kiểm soát màu ggplot2 mặc định bằng một chủ đề.

Các vấn đề liên quan