2017-10-30 7 views
1

私はMLRパッケージのplotLearnerPrediction関数で素敵なプロットを作成しました。返されたggplotをいくつか調整することができました(私のコードは以下を参照してください)。しかし、最後の調整方法はわかりません。つまり、ラベル(サンプルプロットのグループ)に基づいてデータポイントの色付けを変更したいと考えています。色データポイントを変更するplotLearnerPrediction(MLR package)

My last plot (with black data points)

Another produced plot (overlapping data points)

これは私のコードの最後のバージョン(forループの通常の部分)である:以下

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機能のソースコードの一部です。私は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

問題をより明確にするために、元の質問に2番目のサンプルプロットを追加しました。あなたが見ていると、データポイントが重なっていることがわかります。彼らはすべて黒であるので、プロットは実際にはっきりしていないので、私はデータポイントの色を変更したい。各クラスタは同じ色を取得し、データポイントをよりよく理解するのに役立ちます。 –

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

これは本当に涼しいです! 1ポイントあたりのアルファベットを設定することも可能ですか?私は点ごとに責任を返すガウス混合モデルを使用しています。私がこれらの責任をアルファレベルで表現できれば、それは完璧です。もう一つのポイントは、クラスタに基づいてデータポイントの色を変更することに本当に興味があることです。たとえば、すべてのセコサ種のデータポイントをピンクに変更します。あなたが私を助けることができるなら、あなたは私の主人公になるでしょう! –

+0

それから、あなたは美学を使いたいと思っています。私は、プロット関数のソースでこれらを変更する方が簡単だと思います。 –

+0

Tnx!私はすでにソースコードを変更し始めました。私が終了したら私のソリューションをオンラインにします。 –

関連する問題