如何在ggplot2条形图的每个条形上添加对应E值的黑线?
为ggplot2横向条形图添加对应E值的黑色标线
数据结构
实际数据框结构如下:
structure(list(OCCURED_COUNTRY_DESC = c("AUSTRALIA", "AUSTRIA", "BELGIUM", "BRAZIL", "CANADA"), a = c(4L, 7L, 20L, 5L, 11L), b = c(31, 27, 100, 51, 125), c = c(872, 869, 856, 871, 865 ), d = c(5289, 5293, 5220, 5269, 5195), w = c(876, 876, 876, 876, 876), x = c(5320, 5320, 5320, 5320, 5320), y = c(35L, 34L, 120L, 56L, 136L), z = c(6161, 6162, 6076, 6140, 6060 ), N = c(6196, 6196, 6196, 6196, 6196), k = c("0.5", "0.5", "0.5", "0.5", "0.5"), SOR = c(0.80199821407511, 1.52042360060514, 1.21312776329214, 0.615857869962066, 0.539569644832803), log = c(-0.318329070860348, 0.604473324558599, 0.278731499148795, -0.699330656240263, -0.890118907611227), LL99 = c(-0.695969674426877, 0.382102954188229, 0.198127619344382, -1.00534117464748, -1.03425468471322), UL99 = c(-0.0544058884186467, 0.763880731966007, 0.337239065783058, -0.482651467660248, -0.785935460582379 ), flagged = c("no", "no", "no", "no", "yes"), type = c(NA, NA, NA, NA, "under"), MedDRA_PT = c("Seizure", "Seizure", "Seizure", "Seizure", "Seizure"), E = c(5.11098506333901, 4.43283582089552, 16.3984674329502, 8.43063199848168, 20.8132820019249 )), row.names = c(NA, -5L), class = c("tbl_df", "tbl", "data.frame" ))
原绘图代码
当前使用的ggplot2绘图代码如下:
test2 %>% #using test2 as the df ggplot(aes(a, OCCURED_COUNTRY_DESC, fill=type)) + geom_bar(stat="identity")+ scale_fill_manual(values = c("disp" = "#FF8C00", "under" = "#7EC0EE", "NA"="#EEE9E9"))+ theme_classic()+ labs(title = "Seizure", x = "Count", y = "")
解决方案
要为每个国家的条形添加对应E值的黑色标线,可使用geom_segment()函数,在每个分类(国家)对应的y轴位置绘制垂直于x轴的线段,修改后的代码如下:
test2 %>% ggplot(aes(a, OCCURED_COUNTRY_DESC, fill = type)) + geom_bar(stat = "identity") + # 添加对应E值的黑色标线 geom_segment( aes(x = E, xend = E, y = OCCURED_COUNTRY_DESC, yend = OCCURED_COUNTRY_DESC), color = "black", size = 1, # 可调整线的粗细 linetype = "solid" # 可调整线的样式,比如虚线用"dashed" ) + scale_fill_manual(values = c("disp" = "#FF8C00", "under" = "#7EC0EE", "NA" = "#EEE9E9")) + theme_classic() + labs(title = "Seizure", x = "Count", y = "")
代码说明
geom_segment()通过映射x = E和xend = E确定标线的x轴位置,y和yend绑定到国家名称,确保每个国家的标线对应正确的y轴位置。- 若希望标线更醒目,可对
y和yend做微小调整,例如y = as.numeric(OCCURED_COUNTRY_DESC) - 0.2,yend = as.numeric(OCCURED_COUNTRY_DESC) + 0.2,让标线延伸至条形上下区域。
内容的提问来源于stack exchange,提问作者hmcmar
相关产品推荐
相关产品推荐

