2012-12-22 3 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

내가 지금 가지고있는 유일한 해결책은 전설을 바꾸는 것이다. 배경색은 잉크의 낭비이다.

+1

다음은 부분적인 수정입니다 :'+ guides (shape = guide_legend (override.aes ​​= list (color = "white")))'. 불행히도,'theme()'는 기본 포인트 컬러 같은 것들을 변경하는 데 사용할 수 없습니다. – bdemarest

+0

답장을 보내 주셔서 감사합니다 (+1). 나는 그것이 대답으로 추가할만한 가치가 있다고 생각한다 : 나는 분명히 그것을 upvote 할 것이다. – MattBagg

답변

1

한 가지 방법은 두 개의 별도의 geom_point의를 추가하는 것, 논리는 다음과 같습니다

플롯 흰색 점 범례, 예컨대, 아니 전설로 색 포인트를 플롯 한 후, 아니 전설 검은 점을 다룹니다.

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

답변 해 주셔서 감사합니다! (검정색 geom_point는 왜 맨 위의 흰색을 덮고 있기 때문에 필요한가요? 가장자리에 흰색이 나타나는 경우를 알아 챘습니까?) ... 테마를 변경해도 강제로 해결되지 않는 솔루션이 있기를 바랍니다. 코드에 레이어를 추가하십시오. – MattBagg

+0

불완전한 점의 적용 범위를 계획 할 때 눈치 채 셨습니다. 오랫동안 크기가 다르면 괜찮을 것이고 어쩌면 검정을 건너 뛸 것입니다. (나는 당신이 당신의 coloued 포인트의 포인트 크기에 제약 받기를 원하지 않는다면 블랙 포인트 옵션이 있다고 가정합니다) –

2

짧은 대답은 이것을 수행하는 완벽한 방법이없는 것으로 보입니다.

@ user1317221_G 님의 답변에 따라 모양 가이드로 숨겨진 레이어를 추가 할 수 있습니다. 하지만 그것은 여분의 계산이고 pdf로 저장하면 숨겨진 레이어가 존재할 것으로 예상됩니다.

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

을하지만이 여전히 단지 + theme_black()

넘어 테마 고유의 코드를 추가 할 우리를 강제로 : @bdemarest 댓글에서 알 수 있듯이

또한, 우리는, 모양 가이드의 색상을 대체 할 수 있습니다 저는 종이 (회색/흰색 배경) 또는 화면 (검정색 배경)에 대한 플롯을 만들고 있는지에 따라 세션의 기본 테마를 설정하기 때문에 좀 더 정교한 버전을 구현했습니다. ggplot 다음

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

()이 포함되어 : 그래서 내 방식은 초기 세션에서이 라인을 따라 뭔가를 실행하는 것입니다이 테마 -의 필요성을 최소화하는 장점이있다

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

그래도 테마가있는 기본 ggplot2 색상을 제어 할 수있는만큼 좋지는 않지만 플롯에 대한 특정 조정이 필요합니다.

관련 문제