在 ggalluvial 中为 alluvia 添加标签
add labels to alluvia in ggalluvial
是否可以在 ggalluvial
中为冲积层添加标签?
示例图:
library(ggalluvial)
data(vaccinations)
levels(vaccinations$response) <- rev(levels(vaccinations$response))
ggplot(vaccinations,
aes(x = survey, stratum = response, alluvium = subject,
y = freq,
fill = response, label = response)) +
scale_x_discrete(expand = c(.1, .1)) +
geom_flow() +
geom_stratum(alpha = .5) +
geom_text(stat = "stratum", size = 3) +
theme(legend.position = "none") +
ggtitle("vaccination survey responses at three points in time")
现在我想将主题 id/nrs 作为标签添加到冲积层(而不是框)。
有没有可能这样做?
我的原始数据每个冲积层的受试者要少得多(例如 2-5)。
我很想知道完成此任务的更好方法!这是我遇到的最不坏的把戏的例子。您的代码的主要更改如下:
- 美学映射
label = response
已从 ggplot()
调用移至(第一个)geom_text()
层,因此它不会干扰其他文本层。
- 额外的
geom_text()
层与流量统计配对,以便标记每个 "flow" 图形元素。请注意,此类元素的数量多于视觉上无法区分的元素。
- 新的文字层使用了新的美学贴图
label = as.character(subject)
;主题(实际上是队列)ID 是数字,因此省略对字符的强制转换会导致它们毫无意义地加在一起。 (也许这种行为应该可以通过一个新参数来控制?)
- 新的文字层使用美学贴图
color = survey == "ms153_NSA"
为了将第一个时间点和后两个时间点分开,手动色标使其不可见(注意:NA
将是比 "00000000"
) 和其他黑色更合适。尽管请参阅下面的注释。 (设置 data = subset(vaccinations, survey != "ms_153_NSA")
似乎具有相同的效果,但实际上它可能会混淆标签,因为当删除第一个时间点时,流量统计会以不同方式划分流量。)
- 标签从地层偏移到流上
nudge_x = -.25
。
注意:像这样的东西可以用冲积层统计产生所需的行为,但流量统计会在中间时间点(或除first 和 last),这并不总是一致,因为流在左侧和右侧的排列不同。 vignette about stratum and lode ordering 中有一些玩具示例。我认为目前没有任何解决方法。
library(ggalluvial)
#> Loading required package: ggplot2
data(vaccinations)
levels(vaccinations$response) <- rev(levels(vaccinations$response))
ggplot(vaccinations,
aes(x = survey, stratum = response, alluvium = subject,
y = freq,
fill = response)) +
scale_x_discrete(expand = c(.1, .1)) +
geom_flow() +
geom_stratum(alpha = .5) +
geom_text(aes(label = response),
stat = "stratum", size = 3) +
geom_text(aes(label = as.character(subject), color = survey == "ms153_NSA"),
stat = "flow", size = 3, nudge_x = -.25) +
scale_colour_manual(values = c("#000000ff", "#00000000")) +
theme(legend.position = "none") +
ggtitle("vaccination survey responses at three points in time")
由 reprex package (v0.3.0)
于 2020 年 2 月 19 日创建
是否可以在 ggalluvial
中为冲积层添加标签?
示例图:
library(ggalluvial)
data(vaccinations)
levels(vaccinations$response) <- rev(levels(vaccinations$response))
ggplot(vaccinations,
aes(x = survey, stratum = response, alluvium = subject,
y = freq,
fill = response, label = response)) +
scale_x_discrete(expand = c(.1, .1)) +
geom_flow() +
geom_stratum(alpha = .5) +
geom_text(stat = "stratum", size = 3) +
theme(legend.position = "none") +
ggtitle("vaccination survey responses at three points in time")
现在我想将主题 id/nrs 作为标签添加到冲积层(而不是框)。 有没有可能这样做? 我的原始数据每个冲积层的受试者要少得多(例如 2-5)。
我很想知道完成此任务的更好方法!这是我遇到的最不坏的把戏的例子。您的代码的主要更改如下:
- 美学映射
label = response
已从ggplot()
调用移至(第一个)geom_text()
层,因此它不会干扰其他文本层。 - 额外的
geom_text()
层与流量统计配对,以便标记每个 "flow" 图形元素。请注意,此类元素的数量多于视觉上无法区分的元素。 - 新的文字层使用了新的美学贴图
label = as.character(subject)
;主题(实际上是队列)ID 是数字,因此省略对字符的强制转换会导致它们毫无意义地加在一起。 (也许这种行为应该可以通过一个新参数来控制?) - 新的文字层使用美学贴图
color = survey == "ms153_NSA"
为了将第一个时间点和后两个时间点分开,手动色标使其不可见(注意:NA
将是比"00000000"
) 和其他黑色更合适。尽管请参阅下面的注释。 (设置data = subset(vaccinations, survey != "ms_153_NSA")
似乎具有相同的效果,但实际上它可能会混淆标签,因为当删除第一个时间点时,流量统计会以不同方式划分流量。) - 标签从地层偏移到流上
nudge_x = -.25
。
注意:像这样的东西可以用冲积层统计产生所需的行为,但流量统计会在中间时间点(或除first 和 last),这并不总是一致,因为流在左侧和右侧的排列不同。 vignette about stratum and lode ordering 中有一些玩具示例。我认为目前没有任何解决方法。
library(ggalluvial)
#> Loading required package: ggplot2
data(vaccinations)
levels(vaccinations$response) <- rev(levels(vaccinations$response))
ggplot(vaccinations,
aes(x = survey, stratum = response, alluvium = subject,
y = freq,
fill = response)) +
scale_x_discrete(expand = c(.1, .1)) +
geom_flow() +
geom_stratum(alpha = .5) +
geom_text(aes(label = response),
stat = "stratum", size = 3) +
geom_text(aes(label = as.character(subject), color = survey == "ms153_NSA"),
stat = "flow", size = 3, nudge_x = -.25) +
scale_colour_manual(values = c("#000000ff", "#00000000")) +
theme(legend.position = "none") +
ggtitle("vaccination survey responses at three points in time")
由 reprex package (v0.3.0)
于 2020 年 2 月 19 日创建