如何在Plotnine(ggplot)中为geom_segment添加T形末端?
为线段添加T形末端(Plotnine & ggplot2 实现方案)
Python (Plotnine)
直接用geom_errorbar是最简便的方法,它默认自带T形末端,通过width参数可以调整胡须的长度:
import pandas as pd from plotnine import ggplot, aes, theme_light, geom_errorbar, coord_flip, labs df = pd.DataFrame({ 'label' : ['A','B','C','D'], 'start' : [1, 1.5, 2.5, 1.75], 'end' : [3.85, 2.75, 4.25, 3], }) p = (ggplot(df, aes(x='label', ymin='start', ymax='end')) + theme_light() + geom_errorbar(width=0.2) # 调整width改变T形胡须的宽度 + coord_flip() + labs(x=None, y=None) ) p
如果一定要基于geom_segment实现,需要手动添加额外的短线段来模拟T头,但这种方法繁琐,不推荐。
R (ggplot2)
方法1:用geom_errorbar快速实现
和Plotnine逻辑一致,利用geom_errorbar的默认T形末端:
library(ggplot2) df <- data.frame( label = c('A','B','C','D'), start = c(1, 1.5, 2.5, 1.75), end = c(3.85, 2.75, 4.25, 3) ) p <- ggplot(df, aes(x = label, ymin = start, ymax = end)) + theme_light() + geom_errorbar(width = 0.2) + coord_flip() + labs(x = NULL, y = NULL) print(p)
方法2:用geom_segment手动绘制T形末端
若需要保留geom_segment的基础线段,可额外生成T头的短线段数据,叠加绘制:
library(ggplot2) library(tidyr) library(dplyr) df <- data.frame( label = c('A','B','C','D'), start = c(1, 1.5, 2.5, 1.75), end = c(3.85, 2.75, 4.25, 3) ) # 生成T形胡须的线段数据 t_segment_df <- df %>% pivot_longer(cols = c(start, end), names_to = "type", values_to = "y") %>% mutate( x_left = as.numeric(factor(label)) - 0.1, x_right = as.numeric(factor(label)) + 0.1 ) p <- ggplot(df, aes(x = label, xend = label, y = start, yend = end)) + theme_light() + geom_segment() + # 叠加T形胡须 geom_segment(data = t_segment_df, aes(x = x_left, xend = x_right, y = y, yend = y)) + coord_flip() + labs(x = NULL, y = NULL) print(p)
内容的提问来源于stack exchange,提问作者brb
相关产品推荐
相关产品推荐

