【问题标题】:Creating several interaction plots simultaneously from tidy data in R从 R 中的整洁数据同时创建多个交互图
【发布时间】:2018-07-06 00:27:15
【问题描述】:

我有一个整洁的数据框,如下所示:

id  samediff  gainloss  factor  value
1   S         G         happy   5
1   S         G         sad     3
1   S         G         angry   4
2   D         G         happy   2
2   D         G         sad     3
2   D         G         angry   5
3   D         L         happy   1
3   D         L         sad     4
3   D         L         angry   3

这是可重现的数据:

df<- data.frame(id = c(1, 1, 1, 2, 2, 2, 3, 3, 3), 
samediff = c("S", "S", "S", "D", "D", "D", "D", "D", "D"), 
gainloss = c("G", "G", "G", "G", "G", "G", "L", "L", "L"), 
factor = c("happy", "sad", "angry", "happy", "sad", "angry", "happy", "sad", "angry"), 
value = c(5, 3, 4, 2, 3, 5, 1, 4, 3))

我想创建一系列交互图。到目前为止,我已经通过以下方式传播数据来创建交互图:

id  samediff  gainloss  happy  sad  angry 
1   S         G         5      3    4
2   D         G         2      3    5
3   D         L         1      4    3

然后我使用以下函数:

interaction.plot(df$samediff, df$gainloss, df$happy) 

有没有办法同时为每个因素创建单独的交互图?在我的实际数据集中,我有比这里列出的 3 个更多的因素(快乐、悲伤、愤怒),所以知道是否有办法有效地生成这些因素对我很有用。

使用此处的示例,我还需要在interaction.plot 函数中的最后一项是df$sad 和df$angry 的绘图。 interaction.plot 函数中的前两项可以保持不变。

【问题讨论】:

  • 请通过在代码中创建数据集或使用dput()来使您的示例可重现
  • df%&gt;% spread(factor,value)%&gt;% {map2(list(.[2:3]),(.[,-(1:3)]),~cbind(.x,.y)%&gt;% set_names(c("x.factor","trace.factor","response"))%&gt;% invoke(interaction.plot,.))}?

标签: r plot tidyr tidyverse interaction


【解决方案1】:

不是很优雅,但希望很清楚发生了什么,以及如果您的请求有其他更改,可以如何调整它。

df <- data.frame(id = c(1, 1, 1, 2, 2, 2, 3, 3, 3), 
                 samediff = c("S", "S", "S", "D", "D", "D", "D", "D", "D"), 
                 gainloss = c("G", "G", "G", "G", "G", "G", "L", "L", "L"), 
                 factor = c("happy", "sad", "angry", "happy", "sad", "angry", "happy", "sad", "angry"), 
                 value = c(5, 3, 4, 2, 3, 5, 1, 4, 3))
df_2 <- tidyr::spread(df, factor, value)

# Unique values of factor to iterate over and obtain interaction plots for
factor_values <- unique(df$factor)
size <- ceiling(sqrt(length(factor_values)))

par(mfrow = c(size, size))
for(i_factor_value in factor_values) {
  interaction.plot(df_2$samediff, df_2$gainloss, df_2[[i_factor_value]], ylab = i_factor_value)
}
par(mfrow = c(1, 1))

【讨论】:

  • 这两行似乎不起作用。 A行:大小
  • 当我在 c(size,size) 中手动输入值(如 c(5,5) 之类的值)时,我可以显示所有图表。
  • 正如您所说,您有许多不同的地块并且没有指定数量,您所指的代码是一种根据您有多少地块自动确定和设置布局大小的方法(它假设您想要一个方形布局并相应地确定长度和宽度)。是的,如果你发现一个更好的配置,你总是可以手动设置它。
猜你喜欢
  • 2019-05-08
  • 2018-12-07
  • 1970-01-01
  • 1970-01-01
  • 2017-03-04
  • 1970-01-01
  • 2018-06-11
  • 1970-01-01
  • 2023-03-21
相关资源
最近更新 更多