ggplot2绘图优化:设置轴范围并修改物种标签格式
解决方案
可以实现你的需求,以下是修改后的完整代码及说明:
修改步骤说明
- 调整柱形颜色与轴范围:根据Delta值是否大于1设置不同填充色,并将翻转后的X轴(原Y轴)范围固定为0-2,同时添加1作为收缩/扩张的阈值线。
- 处理物种标签:替换物种名中的下划线为空格,并设置为斜体格式。
完整代码
# 加载所需库 library(ggplot2) library(stringr) # 数据预处理 resu_fac_final <- structure(list(species = c("Artibeus_cinereus", "Artibeus_concolor", "Artibeus_gnomus", "Artibeus_jamaicensis", "Artibeus_lituratus", "Artibeus_phaeotis", "Artibeus_planirostris", "Artibeus_toltecus", "Artibeus_watsoni", "Carollia_brevicaudum"), iniDist2 = c(98095, 69677, 43781, 140175, 157200, 52678, 118224, 15658, 13574, 113735 ), iniDist = c(111511, 71610, 61954, 129815, 132053, 50888, 127966, 22795, 15096, 119665), Delta = c(0.87968899929155, 0.973006563329144, 0.70666946444136, 1.07980587759504, 1.19043111477967, 1.03517528690457, 0.923870403075817, 0.686905023031367, 0.899178590355061, 0.950444992270087 )), row.names = c(NA, 10L), class = "data.frame") # 替换物种名中的下划线为空格 resu_fac_final$species <- str_replace_all(resu_fac_final$species, "_", " ") # 绘制图表 ggplot(resu_fac_final, aes(x = reorder(species, Delta), y = Delta)) + geom_bar(stat = "identity", show.legend = TRUE, aes(fill = ifelse(Delta < 1, "收缩", "扩张")), color = "white") + # 添加阈值线(Delta=1) geom_hline(yintercept = 1, color = "black", lwd = 0.5) + # 调整文本位置:收缩类文本在柱形左侧,扩张类在右侧 geom_text(aes(label = round(Delta, 2), hjust = ifelse(Delta < 1, 1.1, -0.1), vjust = 0.5), size = 2.5) + # 设置Y轴范围(翻转后为X轴)0-2 scale_y_continuous(limits = c(0, 2), expand = c(0, 0)) + # 设置自定义颜色 scale_fill_manual(values = c("收缩" = "#ff9999", "扩张" = "#6699ff")) + xlab("物种") + ylab("气候生态位扩张/收缩(Delta)") + coord_flip() + theme_minimal() + # 设置物种标签为斜体 theme(axis.text.y = element_text(face = "italic"), legend.title = element_blank())
关键修改点
- 颜色映射:通过
ifelse(Delta <1, "收缩", "扩张")动态设置填充色,并使用scale_fill_manual指定粉色(收缩)和蓝色(扩张)。 - 轴范围控制:
scale_y_continuous(limits = c(0,2))将原Y轴(翻转后X轴)限制在0-2区间。 - 物种标签处理:
str_replace_all替换下划线为空格,theme(axis.text.y = element_text(face = "italic"))设置斜体。 - 文本位置优化:根据Delta值调整
hjust,确保数值文本显示在柱形外侧,提升可读性。
内容的提问来源于stack exchange,提问作者Gabriel de Mello
相关产品推荐
相关产品推荐

