合并ggplot散点图后,如何沿用红色点图的x轴排序?
解决ggplot合并散点图后保留指定x轴排序的问题
问题根源:你在初始图中仅对Antibiotica6的Specialisme做了因子排序,但添加Antibiotica7的数据时,ggplot会默认根据全局数据重新调整因子水平,导致原本的排序被打乱。
解决方案
核心思路是统一两个数据集的x轴因子水平,强制Antibiotica7遵循Antibiotica6的排序规则:
- 从
Antibiotica6中提取目标排序的因子水平 - 将
Antibiotica7的Specialisme列转换为相同水平的因子 - 基于统一后的因子绘制图形,确保x轴顺序固定
修改后的代码
# 提取Antibiotica6中按Ranking排序的Specialisme因子水平 target_order <- fct_reorder(Antibiotica6$Specialisme, Antibiotica6$Ranking) # 统一两个数据集的Specialisme因子水平 Antibiotica6$Specialisme <- target_order Antibiotica7$Specialisme <- factor(Antibiotica7$Specialisme, levels = levels(target_order)) # 绘制合并后的图形 p <- ggplot(Antibiotica6, aes(x = Specialisme, y = Percentage)) + geom_point( aes(size = Frequentie), alpha = 0.5, colour = "red") + geom_point(data = Antibiotica7, aes(size = Frequentie), alpha = 0.5, colour = "blue") + scale_y_continuous( labels = scales::percent, breaks = seq(0, 1, by = 0.1)) + scale_size( range = c(1, 13), breaks = c(1,50,100,200,300,400,500,600,700,800)) + xlab("Specialisme") + theme( plot.title = element_text(hjust = 0.5), plot.subtitle = element_text(hjust = 0.5)) print(p)
代码说明
target_order直接获取Antibiotica6中按Ranking排序后的Specialisme因子水平,这就是你需要保留的x轴顺序。- 给
Antibiotica7的Specialisme指定levels = levels(target_order),强制它使用和Antibiotica6完全一致的排序,不受自身Ranking列的影响。 - 全局映射中直接使用处理后的
Specialisme,避免后续图层干扰排序规则。
内容的提问来源于stack exchange,提问作者Yvonne
相关产品推荐
相关产品推荐

