如何仅修改ggplot绘制的logistic回归AME图的变量名与展示顺序且不改动原变量
实现方案
两个需求都无需修改原始数据集、模型代码,仅调整绘图相关的临时对象或ggplot参数即可实现,方法如下:
1. 一次性实现标签修改+顺序调整(推荐)
仅修改margins()输出的临时汇总对象xxx的因子列即可,该修改仅作用于xxx,不会干扰其他代码运行:
# 1. 按你想要的展示顺序填写所有因子的原始名称,注意:使用coord_flip()后,第一个元素会显示在图的Y轴最下方 custom_order <- c("sf_sexMale", "age66-76", "sf_maritalMarried", "sf_big1", "sf_hhsize2") # 补全你所有的因子值 # 2. 自定义原始名称和展示名称的映射关系 custom_label_map <- c( "sf_sexMale" = "Male", "age66-76" = "Age 66-76", # 补全其余所有因子的映射即可 ) # 3. 重新设置xxx中factor列的排序和标签 xxx$factor <- factor(xxx$factor, levels = custom_order, labels = custom_label_map)
修改完成后直接运行你原来的ggplot代码即可得到符合要求的图。
2. 仅在ggplot参数中修改(不改动xxx对象)
如果不想修改xxx的内容,可以直接在ggplot的链式调用中添加scale_x_discrete()参数实现相同效果:
ggplot(data = xxx) + geom_point(aes(factor, AME)) + geom_errorbar(aes(x = factor, ymin = lower, ymax = upper)) + geom_hline(yintercept = 0) + coord_flip() + theme_minimal() + labs(x='Variable', y ="Average marginal effect") + # 新增这部分调整顺序和标签 scale_x_discrete( limits = c("sf_sexMale", "age66-76"), # 按你想要的顺序填写原始因子名 labels = c( "sf_sexMale" = "Male", "age66-76" = "Age 66-76" # 补全其余映射 ) )
内容的提问来源于stack exchange,提问作者Marc Asensio Manjon
相关产品推荐
相关产品推荐

