在qplot中循环cut2颜色参数

时间:2018-02-09 16:02:03

标签: r loops ggplot2 hmisc

首先要公平警告,这与来自coursera.org实际机器学习的测验问题有关。但是,我的问题并不涉及所提出的实际问题,而是关于绘图的一个切线问题。

我有一组训练数据,我正在尝试为每个预测器创建一个绘图,其中包括y轴上的结果,x轴上数据集的索引,以及预测器按顺序为绘图着色确定指数偏差的原因。为了使颜色参数更清晰,我试图使用Hmisc包中的cut2()

这是我的数据:

library(ggplot2)
library(caret)
library(AppliedPredictiveModeling)
library(Hmisc)
data(concrete)
set.seed(1000)
inTrain = createDataPartition(mixtures$CompressiveStrength, p = 3/4)[[1]]
training = mixtures[ inTrain,]
testing = mixtures[-inTrain,]
training$index <- 1:nrow(training)

我尝试了这个,它制作了所有的情节,但它们都是相同的颜色。

plotCols <- function(x) { 
  cols <- names(x)
  for (i in 1:length(cols)) {
    assign(paste0("cutEx",i), cut2(x[ ,i]))
    print(qplot(x$index, x$CompressiveStrength, color=paste0("cutEx",i)))
  }
}
plotCols(training)

然后我尝试了这个并且它制作了所有的情节,这次它们是彩色的,但切割不起作用。

plotCols <- function(x) { 
  cols <- names(x)
  for (i in 1:length(cols)) {
    assign(cols[i], cut2(x[ ,i]))
    print(qplot(x$index, x$CompressiveStrength, color=x[ ,cols[i]]))
  }
}
plotCols(training)

似乎qplot()不喜欢在颜色参数中使用paste()。有没有人知道循环颜色参数的另一种方式仍然保持我的削减?非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

使用ggplot()代替qplot()可以更轻松地实现所需的输出,因为您可以使用接受字符串作为参数的aes_string()

plotCols <- function(x) { 
  cols <- names(x)
  for (i in 1:length(cols)) {
    assign(paste0("cutEx", i), cut2(x[, i]))

    p <- ggplot(x) +
         aes_string("index", "CompressiveStrength", color = paste0("cutEx", i)) +
         geom_point()

    print(p)
  }
}

plotCols(training)