【问题标题】:ggplot2 graphing two subsetsggplot2 绘制两个子集
【发布时间】:2016-08-02 17:03:05
【问题描述】:

我有一个如下所示的 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_Config02_130_1_2_3 的单独类型。我可以在ggplot() 参数中使用R 的子集方法,如下所示:

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)。但是,下面这样的东西不起作用:

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_()`

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

【问题讨论】:

  • 如果您绘制 ggplot(test[8:11, ], aes(y = Seconds, x = Job_Num)) + geom_smooth(),您会发现 ggplot 实际上无法为您的第二部分数据获取 geom_smooth()。
  • 这个数据只是,不兼容默认的平滑方法吗?
  • 你经常需要在 geoms 中专门写出data 参数,因为data 不是ggplot 中的第一个参数。试试geom_smooth(data = subset(...etc...))。错误是因为geom_smooth中的第一个参数是mapping,但是你给了一个数据集。

标签: r ggplot2 graphing


【解决方案1】:

如果您还对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

【讨论】:

  • 当我绘制你所写的图表时,我得到的图表与我所做的相同,只是填充了不同的颜色。 (全是浅蓝色而不是全灰色)。你介意告诉我我的代码到底出了什么问题(警告和所有这些/为什么使用不同的平滑方法)?
  • 另外,在任何情况下,我是否还有办法编写此代码,以便我可以单独编辑每种 GPU 类型的平滑? (无论如何也不是 R 专家)
  • @antong 就像我说的,你不能对你的数据使用 LOESS 平滑——这就是警告告诉你的,这就是为什么你的 02_13 配置缺少平滑置信区间的原因。不同的平滑方法(例如method = lm)可以消除此错误,但显然会导致根本不同的绘图。
  • @antong 您不应该对同一图中的数据子集使用不同的平滑方法,这是一种误导(因此 ggplot2 无法轻松做到这一点)。
  • 不,当然,我不会使用两种不同的平滑方法,我只是希望将两种 GPU 配置分开,因为它们的填充可能有不同的颜色,因此可以区分两者,但仍然对每个配置使用相同的平滑方法。所以你的意思是,如果我尝试使用不同的平滑方法(对于所有数据),这两个配置将在填充中“分离”/错误会消失?
猜你喜欢
  • 2013-02-28
  • 1970-01-01
  • 1970-01-01
  • 2021-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-02
  • 1970-01-01
相关资源
最近更新 更多