2017-10-30 6 views
1

MLR 패키지의 plotLearnerPrediction 함수로 멋진 플롯을 만들었습니다. 반환 된 ggplot을 조정할 수있었습니다 (아래 코드 참조). 그러나 나는 마지막 조정을하는 방법을 모르겠습니다. 즉, 레이블 (예제 플롯의 그룹)을 기반으로 데이터 포인트의 색상을 변경하고 싶습니다. 다음은 컬러 데이터 포인트를 변경하십시오. plotLearnerPrediction (MLR package)

plot <- plotLearnerPrediction(learner = learner_name, task = tasks[[i]], cv = 0, 
           pointsize = 1.5, gridsize = 500) + 
    ggtitle(trimws(sprintf("Predictions %s %s", meta$name[i], meta$nr[i])), 
      subtitle = sprintf("DR = %s, ML = %s, CV = LOO, ACC = %.2f", meta$type[i], 
          toupper(strsplit(learner_name, "classif.")[[1]][2]), acc[[i]])) + 
    xlab(sprintf("%s 1", lab)) + 
    ylab(sprintf("%s 2", lab)) + 
    scale_fill_manual(values = colors) + 
    theme(plot.title = element_text(size = 18, face = "bold"), 
     plot.subtitle = element_text(size = 12, face = "bold", colour = "grey40"), 
     axis.text.x = element_text(vjust = 0.5, hjust = 1), 
     axis.text = element_text(size = 14, face = "bold"), 
     axis.title.x = element_text(vjust = 0.5), 
     axis.title = element_text(size = 16, face = "bold"), 
     #panel.grid.minor = element_line(colour = "grey80"), 
     axis.line.x = element_line(color = "black", size = 1), 
     axis.line.y = element_line(color = "black", size = 1), 
     panel.grid.major = element_line(colour = "grey80"), 
     panel.background = element_rect(fill = "white"), 
     legend.justification = "top", 
     legend.margin = margin(l = 0), 
     legend.title = element_blank(), 
     legend.text = element_text(size = 14)) 

가 plotLearnerPrediction 함수의 소스 코드의 일부이다 :

My last plot (with black data points)

Another produced plot (overlapping data points)

이 내 코드 (for 루프의 정상 부분)의 마지막 버전입니다 . geom_point (color = "black")를 무시하고 싶습니다. 내 코드에 단순히 geom_point (color = "pink")를 추가하면 데이터 포인트가 아니라 전체 플롯에 색이 지정됩니다. 그 색상의 벡터로 그 코드를 우회하는 해결책이 있습니까? 그룹을 기반으로 색상을 변경하려면 aes()의 변경이 필요할 수도 있습니다.

 else if (taskdim == 2L) { 
     p = ggplot(mapping = aes_string(x = x1n, y = x2n)) 
     p = p + geom_tile(data = grid, mapping = aes_string(fill = target)) 
     p = p + scale_fill_gradient2(low = bg.cols[1L], mid = bg.cols[2L], 
      high = bg.cols[3L], space = "Lab") 
     p = p + geom_point(data = data, mapping = aes_string(x = x1n, 
      y = x2n, colour = target), size = pointsize) 
     p = p + geom_point(data = data, mapping = aes_string(x = x1n, 
      y = x2n), size = pointsize, colour = "black", 
      shape = 1) 
     p = p + scale_colour_gradient2(low = bg.cols[1L], 
      mid = bg.cols[2L], high = bg.cols[3L], space = "Lab") 
     p = p + guides(colour = FALSE) 
    } 

답변

0

plotLearnerPrediction() 기능은 소스 코드를 수정할 필요없이 사용자 정의 일정 수준을 허용 ggplot 플롯 객체를 반환합니다. 특정 경우에, 당신은 색상을 사용자 정의 설정 채우기 위해 scale_fill_manual()을 사용할 수 있습니다 : 당신은 항상 GG 객체로 해킹 할 수

library(mlr) 
g = plotLearnerPrediction(makeLearner("classif.randomForest"), iris.task) 
g + scale_fill_manual(values = c("yellow", "orange", "red")) 
+0

답장을 보내 주셔서 감사합니다. 이 솔루션을 사용하고 있습니까? https://stackoverflow.com/questions/45755867/change-color-and-legend-of-plotlearnerprediction-ggplot2-object 이것은 그리드의 색만 변경하고 이미 내 암호. 또는 나는 무엇인가 놓치고 있냐? –

+0

그래서 음모가 정확히 보이길 원하세요? –

+0

문제를보다 명확하게하기 위해 원래 질문에 두 번째 예제 플롯을 추가했습니다. 데이터 포인트가 겹치는 것을 볼 수 있습니다. 그들은 모두 검은 색이기 때문에 음모가 명확하지 않으므로 데이터 포인트의 색상을 변경하고 싶습니다. 각 클러스터는 동일한 색상을 가지므로 데이터 요소를 더 잘 이해하는 데 도움이됩니다. –

0

. 다음은 ggplot2 2.2.1에서 작동하며 모든 geom_point 레이어에 수동 알파 값을 추가합니다.

library(mlr) 
library(ggplot2) 
g = plotLearnerPrediction(makeLearner("classif.qda"), iris.task) 
ids.geom.point = which(sapply(g$layers, function(z) class(z$geom)[[1]]) == "GeomPoint") 
for(i in ids.geom.point) { 
    g$layers[[i]]$aes_params$alpha = 0.1 
} 
g 
+0

정말 멋집니다 !! 포인트 당 알파를 설정하는 것도 가능합니까? 나는 점 당 책임을 돌려주는 Gaussian Mixture Model을 사용하고있다. 알파 수준에서 이러한 책임을 표현할 수 있다면 완벽 할 것입니다. 또 다른 요점은 클러스터를 기반으로 데이터 포인트의 색상을 변경하는 것이 정말 궁금합니다. 예를 들어, 모든 종자 종 데이터 포인트를 분홍색으로 변경하십시오. 이걸 도와 주면 내 영웅이 될거야! –

+0

그러면 미학을 사용하기를 원할 것입니다. 필자는 플롯 기능의 소스에서이를 수정하는 것이 더 쉽다고 생각합니다. –

+0

Tnx! 나는 이미 소스 코드를 변경하기 시작했다. 완료되면 솔루션을 온라인에 연결합니다. –