ggfittext::geom_fit_text无法使用vjust参数问题求助
解决ggfittext的geom_fit_text标签重叠问题
你的问题出在对geom_fit_text的vjust参数理解有误:这个参数的有效取值范围是0到1(0对应顶部对齐,1对应底部对齐),你设置的vjust=2和vjust=-1会被自动截断为1和0,导致两个标签仍集中在tile的边缘区域,最终重叠。
下面提供两种简单有效的解决方法:
方法一:用place参数直接指定标签位置
这是最便捷的方式,通过place参数把两个标签分别固定在tile的顶部和底部,ggfittext会自动适配文本大小:
library(tidyverse) library(ggfittext) diamonds %>% group_by(color, clarity) %>% summarise(amount = sum(x), value = sum(y), .groups = "drop") %>% ggplot(aes(x = color, y = clarity, fill = amount)) + geom_tile() + ggfittext::geom_fit_text(place = "top", contrast = TRUE, aes(label = amount)) + ggfittext::geom_fit_text(place = "bottom", contrast = TRUE, aes(label = value))
方法二:手动划分拟合区域(精细控制)
如果需要更精准地控制标签的显示范围,可以将每个tile拆分为上下两个区域,让标签分别拟合在各自区域内:
library(tidyverse) library(ggfittext) diamonds %>% group_by(color, clarity) %>% summarise(amount = sum(x), value = sum(y), .groups = "drop") %>% mutate(clarity_num = as.numeric(clarity)) %>% ggplot(aes(x = color, y = clarity_num, fill = amount)) + geom_tile(aes(ymin = clarity_num - 0.5, ymax = clarity_num + 0.5)) + ggfittext::geom_fit_text(contrast = TRUE, aes(label = amount, ymin = clarity_num, ymax = clarity_num + 0.5)) + ggfittext::geom_fit_text(contrast = TRUE, aes(label = value, ymin = clarity_num - 0.5, ymax = clarity_num)) + scale_y_continuous(breaks = unique(as.numeric(diamonds$clarity)), labels = unique(diamonds$clarity))
内容的提问来源于stack exchange,提问作者anderwyang
相关产品推荐
相关产品推荐

