You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

合并ggplot散点图后,如何沿用红色点图的x轴排序?

解决ggplot合并散点图后保留指定x轴排序的问题

问题根源:你在初始图中仅对Antibiotica6的Specialisme做了因子排序,但添加Antibiotica7的数据时,ggplot会默认根据全局数据重新调整因子水平,导致原本的排序被打乱。

解决方案

核心思路是统一两个数据集的x轴因子水平,强制Antibiotica7遵循Antibiotica6的排序规则:

  1. 从Antibiotica6中提取目标排序的因子水平
  2. 将Antibiotica7的Specialisme列转换为相同水平的因子
  3. 基于统一后的因子绘制图形,确保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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 20:35:26