R语言dot plot基于指定条件为特定数据点添加标签的问题
问题解决方案
原有代码错误说明
- 基础绘图写法错误:
- 判断相等逻辑应该用
==而非赋值符号= - 示例数据
df_roles仅包含name、result两列,df_roles[[3]]属于无效索引 text()本身支持向量化操作,不需要套ifelse,直接筛选目标行传入即可
- 判断相等逻辑应该用
- ggplot2写法错误:
filter()第一个参数需传入完整数据框,而非df_roles$result单列向量aes()内直接使用列名即可,不需要加df_roles$前缀- 筛选后的数据仅包含目标行,直接指定
label=name即可
正确实现代码
首先为了方便演示效果,我们先给示例数据补充一条China的记录:
df_roles <- rbind(df_roles, data.frame(name = "China", result = 0.8))
方案1:基础R绘图实现
# 绘制dot plot dotchart(df_roles$result, labels = rep("", nrow(df_roles)), cex = 0.7, xlab = "result") # 仅给China添加标签 target_row <- df_roles[df_roles$name == "China", ] text( x = target_row$result, y = which(rev(df_roles$name) == "China"), # dotchart默认倒序排列行,需对应调整y轴位置 labels = target_row$name, pos = 2, col = "red", cex = 0.8 )
如果需要标记多个国家,只需把筛选条件改为name %in% c("China", "Argentina")即可。
方案2:ggplot2实现
library(ggplot2) library(dplyr) ggplot(df_roles, aes(x = name, y = result)) + geom_point(size = 2) + theme( axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1, size = 6), axis.title.x = element_blank() ) + # 仅给指定名称的点加标签 geom_text( data = ~filter(.x, name == "China"), aes(label = name), nudge_y = 0.05, color = "red", size = 3 )
内容的提问来源于stack exchange,提问作者MoonS
相关产品推荐
相关产品推荐

