如何在ggplot中按特定顺序排列点以生成漏斗状图?
按Mean值排序绘制漏斗状判别参数图
要实现将变量按Mean值从最低到最高(底部到顶部)排列的漏斗状效果,核心是调整variable列的显示顺序——将其转换为以Mean值为排序依据的有序因子,结合coord_flip()即可达成需求。以下是两种简洁的实现方式:
方法1:预处理数据后绘图
先修改数据框,把variable转为按Mean升序排列的因子,再执行原绘图代码:
plotting <- read.csv("mcmc_test_summary.csv") # 将variable转换为按Mean升序排列的因子 plotting$variable <- factor(plotting$variable, levels = plotting$variable[order(plotting$Mean)]) # 原绘图逻辑保持不变 plot <- ggplot(data = plotting,aes(x = variable, y = Mean)) + geom_point() + geom_errorbar(aes(ymin = Mean - 1.96 * SD, ymax = Mean + 1.96 * SD), width = 0) + xlab("Variable") + ylab("Discrimination Parameter") + coord_flip() + geom_hline(yintercept = 0, linetype = 2) + theme_bw() plot
方法2:在ggplot中直接指定排序
无需修改原始数据,直接在x轴的映射中用reorder()函数动态调整顺序:
plotting <- read.csv("mcmc_test_summary.csv") plot <- ggplot(data = plotting,aes(x = reorder(variable, Mean), y = Mean)) + geom_point() + geom_errorbar(aes(ymin = Mean - 1.96 * SD, ymax = Mean + 1.96 * SD), width = 0) + xlab("Variable") + ylab("Discrimination Parameter") + coord_flip() + geom_hline(yintercept = 0, linetype = 2) + theme_bw() plot
原理说明
两种方式本质都是调整variable的因子顺序:按Mean升序排列后,coord_flip()会将x轴(原变量轴)翻转为y轴,最终呈现出底部对应Mean最小的变量、顶部对应Mean最大的变量的漏斗状布局。
内容的提问来源于stack exchange,提问作者w5698
相关产品推荐
相关产品推荐

