如何用ggtext的element_markdown实现ggplot标签图文垂直居中对齐?
解决ggplot2中y轴文本与图片垂直居中对齐问题
问题说明
用ggplot2搭配ggtext的element_markdown()在y轴嵌入文本和图片时,二者无法垂直居中对齐,需要调整实现期望的对齐效果。
解决方案
核心是给HTML图片标签添加垂直居中样式,同时优化轴文本的布局设置,具体修改如下:
修改后的完整代码
library(tidyverse) library(ggtext) df <- data.frame( logo_html = c( "Augsburg<img src='https://raw.githubusercontent.com/luukhopman/football-logos/master/logos/L1/FC%20Augsburg.png' width='20' style='vertical-align: middle; margin-left: 8px;'>", "Bayern Munich<img src='https://raw.githubusercontent.com/luukhopman/football-logos/master/logos/L1/Bayern%20Munich.png' width='20' style='vertical-align: middle; margin-left: 8px;'>", "Bochum<img src='https://raw.githubusercontent.com/luukhopman/football-logos/master/logos/L1/VfL%20Bochum.png' width='20' style='vertical-align: middle; margin-left: 8px;'>" ), mean_age = c(24.75, 25.27, 28.08) ) df %>% ggplot(aes(x = logo_html, y = mean_age)) + geom_bar(stat = "identity", fill = "steelblue") + coord_flip() + theme_void() + theme( axis.text.y = ggtext::element_markdown( hjust = 1, margin = margin(r = 10) # 增加右侧边距,避免文本与柱子重叠 ) )
关键修改点
- 给每个
<img>标签添加style='vertical-align: middle;':强制图片与文本垂直居中(默认图片为基线对齐,导致错位) - 增加
margin-left: 8px;:让文本与图片间保持适当间距,提升可读性 - 在
element_markdown()中设置margin = margin(r = 10):调整轴文本与柱状图的距离,避免内容重叠
效果对比
- 未对齐效果:

- 居中对齐效果:

内容的提问来源于stack exchange,提问作者gorilla_ballz123
相关产品推荐
相关产品推荐

