jjc*_*cii 0 plot r data-visualization ggplot2
我目前正在尝试使用 Rggalluvial包生成冲积图。我希望用它来绘制连续时间段(Seg1、Seg2、Seg3、Seg4)内不同值之间的多个连续迁移。在 Seg 1 中,所有案例都具有“workseg”值;在 Seg 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")
Run Code Online (Sandbox Code Playgroud)
...我已经能够制作以下情节:
我的主要问题:
1) 是否有一种方法可以根据 Seg4 值,使冲积土填充颜色从开始到结束在整个冲积土链上不一致,而不是根据当前轴值逐轴改变颜色?例如,我希望给定轴上层值为“workseg”的所有股线在该轴和前一个轴之间为蓝色。根据本小插图 底部的疫苗接种示例,类似的情况似乎是可能的(参见附录上方的最后一个图)。该示例中的填充反映了它们各自来自的层(例如,来自“从不”层的所有线都是青色的,无论它们在下一个轴上的值如何)。我基本上想实现与此相反的功能 - 即基于下一个轴的层进行填充(例如,通向“workseg”层的所有股线都是蓝色的,无论它们在前一个轴的值在哪里)。
一个不相关的次要问题:
2)有什么方法可以给alluvia添加注释吗?也就是说,它们的轴包含基于数据集中的值的层标签,但是是否有一种方法可以向线本身添加标签或其他注释信息(超出后期制作中的手动方式)?
geom_flow()在疫苗接种示例中,流通过with fill = response(层变量)采用从左侧层开始的美学;这不能使用 来完成geom_alluvium(),它将每个完整的冲积层渲染为单个图形对象(“grob”)。您链接到的数据采用ggalluvial认为的“宽”格式,即每个轴都是一个变量,但为了具有一致的层变量,数据需要采用“长”格式。
下面的代码进行了这两项更改并使用aes.flow = "backward"(请参阅文档)让流程采用从层到其右侧(而不是左侧)的美学。
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")
Run Code Online (Sandbox Code Playgroud)

由reprex 包(v0.2.1)于 2019-03-28 创建
经过反思,参数aes.flow及其选项的命名约定"forward"可能"backward"不是最直观的。我欢迎对此提出建议!