ggplot2绘制两个子集

时间:2016-08-02 17:03:05

标签: r ggplot2 graphing

我有一个如下所示的CSV数据集:

GPU_Config,Job_Num,Stack_Num,Seconds
02_13,2,16double,1106
02_13,4,16double,906.25
02_13,6,16double,914.75
02_13,8,16double,982.5
02_13,10,16double,1013.25
02_13,12,16double,1067.5
02_13,16,16double,1026.25
0_1_2_3,4,16double,959.75
0_1_2_3,8,16double,847.5
0_1_2_3,12,16double,976.5
0_1_2_3,16,16double,972.75

我想要绘制两个geom_smooth()的图表,每个GPU_Config使用单独类型的02_130_1_2_3R。我可以在ggplot()参数中使用ggplot(subset(test, GPU_Config %in% c("02_13", "0_1_2_3")), aes(y = Seconds, x = Job_Num, color = GPU_Config)) + geom_smooth() + geom_point() 的子集方法,如下所示:

gpu type

然而,这会产生如下图:

Test Graph

我希望将两个平滑器分开,以便能够为每个数据子集(ggplot(test, aes(y = Seconds, x = Job_Num)) + geom_smooth(subset(test, GPU_Config %in% c("02_13"))) + geom_smooth(subset(test, GPU_Config %in% c("0_1_2_3"))) + geom_point() )单独操作每个平滑器。但是,下面这样的内容不起作用:

Error: Mapping must be created by `aes()` or `aes_()`

并导致此错误:

String.prototype.replaceAt=function(index, character) {
    if(index>-1) return this.substr(0, index) + character + this.substr(index+character.length);
    else return this.substr(0, this.length+index) + character + this.substr(index+character.length);

}

有人可以帮忙完成这项工作吗?注意我无论如何都不是R专家。

1 个答案:

答案 0 :(得分:2)

如果您还对fill颜色进行分层:

,则此功能正常
ggplot(subset(test, GPU_Config %in% c("02_13", "0_1_2_3"))) +
    aes(y = Seconds, x = Job_Num, color = GPU_Config, fill = GPU_Config) +
    geom_smooth() +
    geom_point()

但是,在所有情况下,02_13配置都会遇到本地适配问题 - 您的代码会发出相应的警告,即使在原始版本中也是如此。要解决这个问题,需要采用不同的平滑方法,例如:

ggplot(subset(test, GPU_Config %in% c("02_13", "0_1_2_3"))) +
    aes(y = Seconds, x = Job_Num, color = GPU_Config, fill = GPU_Config) +
    geom_smooth(method = lm) +
    geom_point()

这会将置信区间隔开GPU_Config