我目前正在尝试使用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")
...我已经能够生成以下情节:
我的主要问题:
1)是否有一种方法可以使Seg4值的基础上的冲积物填充颜色从头到尾在整个冲积线中不一致,但是可以使INSTEAD的色泽逐轴变化,这取决于Seg4值。当前轴值?例如,我希望在给定轴和前一个轴之间的所有具有Stras值为“ workseg”的股线都为蓝色。根据接种示例,类似的事情似乎是可能的在this vignette的底部(请参阅附录上方的最后一个图)。该示例中的填充物反映了它们各自来自一个轴到另一个轴的层(例如,来自“从不”层的所有股都是蓝绿色,而不管它们在下一轴上的值如何)。我基本上想实现相反的效果-也就是说,基于 next 轴的层次进行填充(例如,导致“ workseg”层次的所有链条都是蓝色的,无论其值在前一个轴上的什么位置。
一个不相关的次要问题:
2)有什么方法可以添加注释到alluvia?也就是说,它们的轴包含基于数据集中值的地层标签,但是有没有一种方法可以向线束本身添加标签或其他注释信息(在后期制作中会手动添加)?
答案 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}}的命名约定可能不是最直观的。我欢迎提出建议!