使用ggalluvial包为sankey图的轴添加标签数据

3
如何在ggalluvial桑基图中的三个轴上的白色框中添加标签名称?(见图像)
“Country”列具有多个国家的观测值。在下面的示例中,我专注于爱尔兰,它有标签“IE”。如何使用下面的ggplot代码从数据帧中获取Country名称?如果解决方案还可以包括“Vaccine”和“TargetGroup”列,我将不胜感激。谢谢!
数据帧代码和sankey颜色-数据来自欧盟ECDC
data <- read.csv("https://opendata.ecdc.europa.eu/covid19/vaccine_tracker/csv/data.csv", na.strings = "", fileEncoding = "UTF-8-BOM")
colnames(data)[2] <- "Country"
TestData <- data
Ireland <- subset(TestData, Country == "IE")

Combined <- rbind(Ireland ) #removed other countries for ease of reading

Col1 <- "slateblue2"
Col2 <- "chartreuse2"
Col3 <- "tomato2"
Col4 <- "orange2"
Col5 <- "plum3"
Col6 <- "grey43"
Col7 <- "deeppink"

alpha <- 0.2

以下是桑基图的代码 - 我没有正确地将标签应用到相应的轴上

ggplot(Combined,
       aes(weight = FirstDose, axis1 = Vaccine, axis2 = Country, axis3 = TargetGroup)) +
  geom_alluvium(aes(fill = Vaccine, color = Vaccine), 
                width = 0.1, alpha = alpha, knot.pos = 0.4) +
  geom_stratum(width = 0.2, color = "black") +
  geom_label(stat = "stratum", label.strata = TRUE) +
  scale_x_continuous(breaks = 1:3, labels = c("Vaccine", "Country", "TargetGroup"))     +
  scale_fill_manual(values  = c(Col1, Col2, Col3, Col4, Col5, Col6, Col7)) +
  scale_color_manual(values = c(Col1, Col2, Col3, Col4, Col5, Col6, Col7)) +
  ggtitle("ECDC Vaccination data") +
  theme_minimal() +
  theme(
    axis.text.x = element_text(size = 12, face = "bold")
  )

这是一张图片 - 你可以看到坐标轴上的标签已经丢失。 sankey without axes labels

我认为答案在这里geom_label(stat="stratum",label.strata=TRUE),但我找不到任何有助于解决这个问题的文档。 - ceallac
1个回答

3

找出问题所在-完整的代码块在这里。希望这能帮助某些人。

ggplot(Combined,
       aes(weight = FirstDose, axis1 = Vaccine, axis2 = Country, axis3 = TargetGroup)) +
  geom_alluvium(aes(fill = Vaccine, color = Vaccine), 
                width = 0.1, alpha = alpha, knot.pos = 0.4) +
  geom_stratum(width = 0.2, color = "black") +
  geom_text(stat = "stratum", aes(label = after_stat(deposit)),
            color = "black") + 
  geom_label(stat = "stratum", aes(label = after_stat(stratum)), min.y = 200) + 
  scale_x_continuous(breaks = 1:3, labels = c("Vaccine", "Country", "TargetGroup"))     +
  scale_fill_manual(values  = c(Col1, Col2, Col3, Col4, Col5, Col6, Col7)) +
  scale_color_manual(values = c(Col1, Col2, Col3, Col4, Col5, Col6, Col7)) +
  ggtitle("ECDC Vaccination data") +
  theme_minimal() +
  theme(legend.position = "none",     panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),     axis.text.y = element_blank(),       
        axis.text.x = element_text(size = 12, face = "bold")
  )

geom_stratum() 参数后面加入以下两行代码(我对它们还不是很理解)。这些标签就会出现在我想要的位置。目前还不够美观。
  geom_text(stat = "stratum", aes(label = after_stat(deposit)),
            color = "black") + 
  geom_label(stat = "stratum", aes(label = after_stat(stratum)), min.y = 200) + 

解决方案 solution

这篇博客 http://corybrunson.github.io/ggalluvial/reference/stat_stratum.html 提供了答案。


谢谢!这很有帮助。我还没有尝试过你的数据,但你确定需要这两个语句吗?对于我的数据,我只需要在geom_text中添加aes(label = after_stat(count))就可以使其工作(我需要count函数而不是deposit)。 - sharp-spark

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接