R中的ggalluvial软件包-按轴(而不是仅按最终轴)设置冲积层填充颜色

时间:2019-03-25 22:34:01

标签: r ggplot2 plot data-visualization

我目前正在尝试使用ggalluvial package在R中产生一个冲积图。我希望借助它绘制连续时间段(Seg1,Seg2,Seg3,Seg4)中不同值之间的倍数上的连续迁移。在段1,所有情况的值为“ workseg”;在段2,该值可以是其他三个值之一(相关内容,不相关内容,NONE); Seg3和Seg4值可以是四个选项中的任何一个。

使用以下代码...

##Reorder levels per segment (make vertical order of strata levels identical 
across all axes, rather than "zig-zag" --> this is just an aesthetic 
preference)##

dRG.lode <- dRG %>%
  mutate(Seg2 = factor(Seg2, levels=c("workseg", "related content", 
"unrelated content", "NONE")),
         Seg3 = factor(Seg3, levels=c("workseg", "related content", 
"unrelated content", "NONE")),
         Seg4 = factor(Seg4, levels=c("workseg", "related content", 
"unrelated content", "NONE")))


##Plot##

ggplot(as.data.frame(dRG.lode),
       aes(axis1 = Seg1, axis2 = Seg2, axis3 = Seg3, axis4 = Seg4)) +
  geom_alluvium(aes(fill = Seg4), width = 1/12) +
  guides(fill = FALSE) +
  geom_stratum(width = 1/12, fill = "black", color = "grey") +
  geom_label(stat = "stratum", label.strata = TRUE) +
  scale_x_discrete(limits = c("Seg1", "Seg2", "Seg3", "Seg4"), expand = 
c(.05, .05, .05, .05)) +
  scale_fill_brewer(type = "qual", palette = "Set1") +
  ggtitle("Time Course, Segment by Segment")

...我已经能够生成以下情节:

...enter image description here

我的主要问题:

1)是否有一种方法可以使Seg4值的基础上的冲积物填充颜色从头到尾在整个冲积线中不一致,但是可以使INSTEAD的色泽逐轴变化,这取决于Seg4值。当前轴值?例如,我希望在给定轴和前一个轴之间的所有具有Stras值为“ workseg”的股线都为蓝色。根据接种示例,类似的事情似乎是可能的在this vignette的底部(请参阅附录上方的最后一个图)。该示例中的填充物反映了它们各自来自一个轴到另一个轴的层(例如,来自“从不”层的所有股都是蓝绿色,而不管它们在下一轴上的值如何)。我基本上想实现相反的效果-也就是说,基于 next 轴的层次进行填充(例如,导致“ workseg”层次的所有链条都是蓝色的,无论其值在前一个轴上的什么位置。

一个不相关的次要问题:

2)有什么方法可以添加注释到alluvia?也就是说,它们的轴包含基于数据集中值的地层标签,但是有没有一种方法可以向线束本身添加标签或其他注释信息(在后期制作中会手动添加)?

1 个答案:

答案 0 :(得分:1)

在疫苗接种的示例中,流程通过geom_flow()fill = response(阶层变量)从阶层到其左侧采用美学;使用geom_alluvium()无法做到这一点,aes.flow = "backward"会将每个完整的冲积层渲染为单个图形对象(“ grob”)。链接到的数据采用 ggalluvial 格式,即“宽”格式,即每个轴都是变量,但是为了具有一致的地层变量,数据必须采用“长”格式

下面的代码同时进行了这些更改,并使用library(dplyr) #> #> Attaching package: 'dplyr' #> The following objects are masked from 'package:stats': #> #> filter, lag #> The following objects are masked from 'package:base': #> #> intersect, setdiff, setequal, union library(ggplot2) library(ggalluvial) dRG <- read.csv("~/Downloads/mydata.csv") dRG.lode <- dRG %>% mutate(Seg2 = factor(Seg2, levels=c("workseg", "related content", "unrelated content", "NONE")), Seg3 = factor(Seg3, levels=c("workseg", "related content", "unrelated content", "NONE")), Seg4 = factor(Seg4, levels=c("workseg", "related content", "unrelated content", "NONE"))) dRG.long <- to_lodes_form(dRG.lode, -X, key = "segment", value = "value", id = "id") ggplot(dRG.long, aes(x = segment, stratum = value, alluvium = id)) + geom_flow(aes(fill = value), width = 1/12, aes.flow = "backward") + guides(fill = FALSE) + geom_stratum(width = 1/12, fill = "black", color = "grey") + geom_label(stat = "stratum", label.strata = TRUE) + scale_x_discrete(limits = c("Seg1", "Seg2", "Seg3", "Seg4"), expand = c(.05, .05, .05, .05)) + scale_fill_brewer(type = "qual", palette = "Set1") + ggtitle("Time Course, Segment by Segment") (请参阅the documentation)使流程从阶层到权利(而不是左边)采用美感。

aes.flow

reprex package(v0.2.1)于2019-03-28创建

在反思中,参数"forward"及其选项"backward"和{{1}}的命名约定可能不是最直观的。我欢迎提出建议!