【问题标题】:change color data points plotLearnerPrediction (MLR package)更改颜色数据点 plotLearnerPrediction(MLR 包)
【发布时间】:2018-04-11 20:10:44
【问题描述】:

我用 MLR 包的 plotLearnerPrediction 函数制作了一些漂亮的图。我能够对返回的 ggplot 进行一些调整(请参阅下面的代码)。但我不确定如何进行最后的调整。即,我想根据标签(示例图中的组)更改数据点的颜色。

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(colour = "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)
    }

【问题讨论】:

    标签: r ggplot2 colors mlr


    【解决方案1】:

    你总是可以侵入 gg 对象。以下适用于 ggplot2 2.2.1,并为所有 geom_point 图层添加手动 alpha 值。

    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
    

    【讨论】:

    • 这真的很酷!!是否也可以设置每点的阿尔法?我正在使用一个高斯混合模型,它返回每点的责任。如果我能以阿尔法水平表达这些责任,那将是完美的。另一点是我真的很好奇基于集群改变数据点的颜色。例如,将所有 setosa 物种数据点更改为粉红色。如果你能帮助我,你将是我的英雄!
    • 那么你会回到想要使用美学的地方。我认为在绘图函数的源代码中修改这些更容易。
    • Tnx!我已经开始更改源代码。完成后我会将我的解决方案上线。
    【解决方案2】:

    plotLearnerPrediction() 函数返回ggplot 绘图对象,该对象允许进行某种程度的自定义,而无需修改源代码。在您的特定情况下,您可以使用 scale_fill_manual() 设置自定义填充颜色:

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

    【讨论】:

    • 感谢您的回答。您是否正在参考这个解决方案:stackoverflow.com/questions/45755867/… 这只会改变网格的颜色并且已经在我的代码中使用。还是我错过了什么?
    • 那么您希望情节到底是什么样的?
    • 我在原始问题中添加了第二个示例图,以使问题更加清晰。如果您看一下,您会发现数据点是重叠的。因为它们都是黑色的,所以情节不是很清楚,所以我想改变数据点的颜色。每个集群都将获得相同的颜色,希望这有助于更好地区分数据点。
    • 啊,为此您确实需要更改我认为的代码。您需要在aes 中为geom_point() 输入类似color = class 的内容。也就是说,我认为这不会使情节更具可读性。您是否考虑过透明度?
    猜你喜欢
    • 2023-03-12
    • 2021-10-08
    • 1970-01-01
    • 2013-11-30
    • 1970-01-01
    • 1970-01-01
    • 2016-01-22
    • 2023-03-15
    • 1970-01-01
    相关资源
    最近更新 更多