R 冲积有序层
我一直在试着做一些sankey图表。我很喜欢,但我在控制矿脉的顺序方面有问题。我使用的是小插曲开头描述的alluvia格式 基本上,我的图表显示了一个时间点的级别2和级别3的子集,以及它们如何移动到另一个时间点。问题是,我一辈子都搞不清楚如何强制阶层的秩序,因为如果没有正确的秩序,图表是不可读的。这是我的密码:R 冲积有序层,r,ggplot2,R,Ggplot2,我一直在试着做一些sankey图表。我很喜欢,但我在控制矿脉的顺序方面有问题。我使用的是小插曲开头描述的alluvia格式 基本上,我的图表显示了一个时间点的级别2和级别3的子集,以及它们如何移动到另一个时间点。问题是,我一辈子都搞不清楚如何强制阶层的秩序,因为如果没有正确的秩序,图表是不可读的。这是我的密码: library("ggalluvial") library("ggplot2") subsank_math = structure(list(`Winter Projection` =
library("ggalluvial")
library("ggplot2")
subsank_math = structure(list(`Winter Projection` = structure(c(2L, 2L, 2L,
2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 5L,
5L, 5L, 5L, 5L, 5L), .Label = c("Level 5", "Level 4", "Level 3",
"Level 2", "Level 1"), class = "factor"), subgroup = structure(c(1L,
2L, 3L, 4L, 5L, 6L, 1L, 2L, 3L, 4L, 5L, 6L, 1L, 2L, 3L, 4L, 5L,
6L, 1L, 2L, 3L, 4L, 5L, 6L), .Label = c("Level 3 (+)", "Level 3",
"Level 3 (-)", "Level 2 (+)", "Level 2", "Level 2 (-)"), class = "factor"),
n = c(119, 102, 16, 10, 12, 1, 272, 544, 182, 151, 134, 22,
40, 239, 204, 326, 663, 225, 0, 15, 12, 44, 215, 219)), row.names = c(NA,
-24L), .Names = c("Winter Projection", "subgroup", "n"), class = "data.frame")
ggplot(subsank_math,
aes(weight = n,
axis1 = subgroup, axis2 = `Winter Projection`)) +
geom_alluvium(aes(fill = subgroup),
width = 0, knot.pos = 0, reverse = FALSE) +
geom_stratum(width = 1/8, reverse = FALSE) +
geom_text(stat = "stratum", label.strata = TRUE, reverse = FALSE)
有点奇怪,它根据因子的级别来排列第一个轴,而不是第二个轴。
我自己刚刚开始玩GGD包,所以我不想说我了解它是如何工作的,但将数据帧重新格式化为lode格式(在包的小插曲末尾描述)对我来说很有效:
library(dplyr)
library(tidyr)
df.lode <- subsank_math %>%
mutate(subject = seq(1, n())) %>%
gather(x, level, -n, -subject) %>%
mutate(level = factor(level,
levels = c("Level 1", "Level 2 (-)", "Level 2",
"Level 2 (+)", "Level 3 (-)", "Level 3",
"Level 3 (+)", "Level 4")))
> head(df.lode)
n subject x level
1 119 1 Winter Projection Level 4
2 102 2 Winter Projection Level 4
3 16 3 Winter Projection Level 4
4 10 4 Winter Projection Level 4
5 12 5 Winter Projection Level 4
6 1 6 Winter Projection Level 4
ggplot(df.lode,
aes(x = x,
stratum = level,
alluvium = subject,
weight = n,
label = level)) +
geom_flow(aes(fill = level)) +
geom_stratum() +
geom_text(stat = "stratum") +
scale_fill_discrete(limits = levels(df$a1))
库(dplyr)
图书馆(tidyr)
df.lode%
突变(受试者=seq(1,n())%>%
聚集(x级,-n级,-主题)%>%
突变(水平=因子(水平,
级别=c(“级别1”、“级别2(-)”、“级别2”,
“2级(+)”、“3级(-)”、“3级”,
“三级(+)”、“四级”))
>头部(矿脉方向)
n科目x级别
1191冬季预测4级
2 102 2冬季预测4级
3 16 3冬季预测4级
4 10 4冬季预测4级
5 12 5冬季预测4级
6.1.6冬季预测4级
ggplot(矿脉分布),
aes(x=x,
地层=水平,
冲积层=主体,
重量=n,
标签=标高)+
几何流量(aes(填充=液位))+
geom_地层()+
geom_文本(stat=“地层”)+
刻度\填充\离散(限值=标高(df$a1))
非常酷。我以前尝试过使用lode格式,但显然遗漏了一些东西。非常感谢。(+1)引入了一条警告消息和一个基于
make.unique()
的解决方案,但这仍然是解决问题的正确方法。我也遇到过类似的问题,并意识到这是由不同层中的一个或多个相同级别引起的(在您的案例中,“级别2”和“级别3”在子组和冬季投影中。在引擎盖下,必须将层(axis1、axis2等)重塑为单个长因子,这会混淆顺序。解决方案:确保所有层的所有级别都是唯一的,或者首先按照@Z.Lin所述重塑为Iode格式。