如何修改Alluvial Diagram流向颜色并自定义调色板?
自定义ggalluvial冲积图的调色板与流向颜色
1. 自定义调色板的命令
当然有,在ggplot2生态中,最灵活的自定义填充颜色方式是使用scale_fill_manual(),它允许你手动指定每个分类变量对应的颜色。此外也可以用scale_fill_viridis_d()(离散型)、scale_fill_gradient()(连续型)等函数实现半自定义调色,但scale_fill_manual()完全可控,最适合你的场景。
2. 针对你的ggalluvial代码修改方案
首先注意你的代码里有个小问题:绘图时用了df.2,但前面数据处理的对象是df,需要先修正这个笔误。然后替换原来的scale_fill_brewer()为scale_fill_manual(),指定每个status水平对应的颜色即可自定义流向(冲积)的颜色。
修改后的完整代码:
library(ggalluvial) library(ggplot2) library(dplyr) df <- data.frame(status = c("open", "close", "close", "open/close", "close"), stock = c("google", "amazon", "amazon", "yahoo", "amazon"), newspaper = c("times", "newyork", "london", "times", "times")) # 统计每个冲积的出现次数 df <- df %>% dplyr::group_by(stock, newspaper, status) %>% summarise(n = n(), .groups = "drop") # 加上.groups避免dplyr警告 # 定义因子水平 df$status <- factor(df$status, levels = c("open", "open/close", "close")) df$stock <- factor(df$stock, levels = c("google", "amazon", "yahoo")) df$newspaper <- factor(df$newspaper, levels = c("times", "newyork", "london")) # 绘制冲积图,自定义流向颜色 ggplot2::ggplot(df, aes(y = n, axis1 = stock, axis2 = newspaper)) + ggalluvial::geom_alluvium(aes(fill = status), width = 1/12) + ggalluvial::geom_stratum(width = 1/12, fill = "black", color = "grey") + ggplot2::geom_label(stat = "stratum", aes(label = after_stat(stratum))) + ggplot2::scale_x_discrete(limits = c("stock", "newspaper"), expand = c(.05, .05)) + # 自定义颜色映射:对应status的每个因子水平 ggplot2::scale_fill_manual(values = c( "open" = "#1f77b4", # 蓝色 "open/close" = "#ff7f0e", # 橙色 "close" = "#2ca02c" # 绿色 ))
关键说明
scale_fill_manual()的values参数需要传入一个命名向量,名称对应你的分类变量(这里是status)的每个水平,值是你想要的颜色(可以是十六进制码、颜色名称如"red"、RGB值等)。- 如果你想使用现成的调色板但手动选择颜色,也可以用
RColorBrewer::brewer.pal()提取颜色,比如values = RColorBrewer::brewer.pal(3, "Set2"),但要确保颜色数量和分类水平数一致。
内容的提问来源于stack exchange,提问作者Erik Brole
相关产品推荐
相关产品推荐

