R 冲积有序层

R 冲积有序层,r,ggplot2,R,Ggplot2,我一直在试着做一些sankey图表。我很喜欢,但我在控制矿脉的顺序方面有问题。我使用的是小插曲开头描述的alluvia格式 基本上,我的图表显示了一个时间点的级别2和级别3的子集,以及它们如何移动到另一个时间点。问题是,我一辈子都搞不清楚如何强制阶层的秩序,因为如果没有正确的秩序,图表是不可读的。这是我的密码: library("ggalluvial") library("ggplot2") subsank_math = structure(list(`Winter Projection` =

我一直在试着做一些sankey图表。我很喜欢,但我在控制矿脉的顺序方面有问题。我使用的是小插曲开头描述的alluvia格式

基本上,我的图表显示了一个时间点的级别2和级别3的子集,以及它们如何移动到另一个时间点。问题是,我一辈子都搞不清楚如何强制阶层的秩序,因为如果没有正确的秩序,图表是不可读的。这是我的密码:

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格式。