【发布时间】:2020-03-31 11:20:36
【问题描述】:
我认为我已经以正确的方式设置了数据集,从表格开始。这是我的代码:
M <- data.frame(as.matrix( table(as.character(df$q4.1),as.character(df$q4.2))))
M <- filter(M, Freq !=0)
q4.1 和 q4.2 是两个具有相同类别的分类变量。我对可视化从 q4.1 到 q4.2 的答案的流程很感兴趣。
nodes <- data.frame(
name=c(as.character(M$Var1), as.character(M$Var2)) %>% unique()
)
问题是,鉴于这两个变量具有相同的名称,当我创建节点时,它只包含一组“名称”。
因此,如果有人在两个问题中选择了相同的选项,则最终会具有相同的源和目标(请参见下面的示例)
M$IDsource <- match(M$Var1, nodes$name)-1
M$IDtarget <- match(M$Var2, nodes$name)-1
M
Var1 Var2 Freq IDsource IDtarget
No idea No idea 16 7 7
您可以想象,生成的图表很奇怪,因为对两个问题提供相同答案的人显示为返回同一来源的圆圈。
重命名第二个问题中的类别是解决问题的唯一方法吗?还是我做错了什么?
感谢支持!
附:我已经使用 ggplot2 中的 ggalluvial 包来创建我想要的图形。但是,它不如使用 networkD3 包获得的图那么好(并且可以导出为 htmlwidget),所以我想用 networkD3 重新创建相同的图。 这是我与 ggalluvial 包一起使用的成功代码。
ggplot(data= M, aes(axis1= Var1, axis2= Var2, y= Freq)) + scale_x_discrete(limits = c("Next 6 months", "Next 12-18 Months"), expand=c(0.1, 0.05)) + geom_alluvium() + geom_stratum() + geom_text(stat="stratum", infer.label = TRUE)
【问题讨论】:
-
既然你是新贡献者,请关注stackoverflow.com/help/someone-answers
标签: networkd3 r r sankey-diagram htmlwidgets networkd3