如何在ggplot的geom_alluvium图Y轴类别间添加间距?
给冲积图的冲积带添加Y轴间距的方法
geom_alluvium本身没有直接设置冲积带间Y轴间距的参数,但可以通过预处理数据调整Y轴分组位置的方式实现,以下是具体步骤:
1. 预处理数据,给分类添加间隙偏移
先将离散的Category转换为带间隙的数值型Y值,确保不同分类的冲积带之间留出空白:
library(dplyr) library(forcats) # 保持Category的原有顺序,给每个分类分配基础数值,再添加间隙 mydata <- mydata %>% mutate(Category = fct_inorder(Category)) %>% # 锁定分类顺序 group_by(Category) %>% mutate(base_y = as.numeric(Category)) %>% # 基础Y值 ungroup() %>% # 每个分类间添加0.3的间隙(可根据需求调整数值) mutate(adjusted_y = base_y + (base_y - 1) * 0.3)
2. 修改绘图代码,使用调整后的Y值
将原代码中的y = Category替换为y = adjusted_y,并修正原代码中的拼写错误(legend. Position改为legend.position):
ggplot(data = mydata, aes(x = Year, y = adjusted_y, alluvium = OPP)) + geom_alluvium(aes(fill = OPP, colour = OPP), alpha = 0.9, decreasing = FALSE, width = 1/4) + scale_x_continuous(breaks = seq(2015, 2016, 1), labels = c("General", "Specific")) + # 匹配原分类的Y轴刻度(如果需要显示Y轴标签可取消注释下面的labels) scale_y_continuous(breaks = unique(mydata$adjusted_y) # labels = unique(mydata$Category) ) + theme_minimal() + labs(y = "", x = "") + theme( plot.margin = margin(2, 2, 2, 2, "cm"), panel.grid.major.x = element_blank(), panel.grid.minor.x = element_blank(), panel.grid.major.y = element_blank(), panel.grid.minor.y = element_blank(), axis.text.x = element_text(size = 10, face = 'bold'), axis.text.y = element_blank(), axis.line.y = element_blank(), axis.ticks.y = element_blank(), axis.line.x = element_blank(), axis.ticks.x = element_blank(), legend.position = "none" ) + scale_fill_brewer(type = "qual", palette = "Set3") + scale_color_brewer(type = "qual", palette = "Set3")
补充说明
- 间隙大小可通过修改
adjusted_y中的0.3来调整,数值越大间隙越宽; - 如果需要显示Y轴的分类标签,取消
scale_y_continuous中labels参数的注释即可; - 原代码中
legend. Position的拼写错误已修正为legend.position,避免报错。
内容的提问来源于stack exchange,提问作者Shaiza Bushra
相关产品推荐
相关产品推荐

