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

如何在R的ggplot2中为原始数据散点图添加SCS-MP2参考线?

问题排查与修正方案

原代码核心问题

  • ggplot语法错误:在aes()中使用cg$列名是冗余且易出错的写法,ggplot会自动从指定的data中读取列
  • geom_line()参数错误:原写法未正确指定参考线的数据源和映射关系,导致生成混乱线条
  • 图例标题错误:将color的图例标题设为"Class Type",但实际映射的是Functional变量
  • 包加载逻辑错误:install.packages()放在library()之后,且未加安装判断,重复执行会报错

修正后的代码

# Load Packages
# 先判断包是否安装,未安装再执行安装
if (!require("car")) install.packages("car")
if (!require("ggplot2")) install.packages("ggplot2")
if (!require("readxl")) install.packages("readxl")
if (!require("tidyr")) install.packages("tidyr")

library(ggplot2)
library(readxl)
library(car)
library(tidyr)

# 读取数据(若使用本地文件则启用下方代码,否则直接使用提供的dput数据)
# cg <- read_excel("ReultsAllTogether_stacks.xlsx")
cg <- structure(list(Functional = c("B3LYP", "SCS-MP2", "B3LYP", "SCS-MP2", 
"B3LYP", "SCS-MP2", "B3LYP", "SCS-MP2", "B3LYP", "SCS-MP2", "B3LYP", 
"SCS-MP2", "B3LYP", "SCS-MP2", "B3LYP", "SCS-MP2", "B3LYP", "SCS-MP2", 
"B3LYP", "SCS-MP2", "B3LYP", "SCS-MP2", "B3LYP", "SCS-MP2", "B3LYP", 
"SCS-MP2", "B3LYP", "SCS-MP2", "B3LYP", "SCS-MP2", "B3LYP", "SCS-MP2", 
"B3LYP", "SCS-MP2", "B3LYP", "SCS-MP2", "B3LYP", "SCS-MP2", "B3LYP", 
"SCS-MP2"), Basis = c("b1", "b1", "b1", "b1", "b1", "b1", "b1", 
"b1", "b1", "b1", "b1", "b1", "b1", "b1", "b1", "b1", "b1", "b1", 
"b1", "b1", "b1", "b1", "b1", "b1", "b1", "b1", "b1", "b1", "b1", 
"b1", "b1", "b1", "b1", "b1", "b1", "b1", "b1", "b1", "b1", "b1"
), Class = c("C2", "C2", "C2", "C2", "C2", "C2", "C2", "C2", 
"C2", "C2", "C3", "C3", "C3", "C3", "C3", "C3", "C3", "C3", "C3", 
"C3", "C4", "C4", "C4", "C4", "C4", "C4", "C4", "C4", "C4", "C4", 
"C5", "C5", "C5", "C5", "C5", "C5", "C5", "C5", "C5", "C5"), 
    In = c("Li", "Li", "Na", "Na", "K", "K", "Rb", "Rb", "Cs", 
    "Cs", "Li", "Li", "Na", "Na", "K", "K", "Rb", "Rb", "Cs", 
    "Cs", "Li", "Li", "Na", "Na", "K", "K", "Rb", "Rb", "Cs", 
    "Cs", "Li", "Li", "Na", "Na", "K", "K", "Rb", "Rb", "Cs", 
    "Cs"), CT = c(0.40456288154279, 0.372834665210701, 0.355454014133149, 
    0.313462952666224, 0.304072955130357, 0.251637090727318, 
    0.28181198329498, 0.222999362898535, 0.254776916782981, 0.194195055958677, 
    0.404186306229368, 0.37268736669808, 0.354997616399174, 0.31330968123421, 
    0.30365432465555, 0.251510008485998, 0.281443473835977, 0.222902895704843, 
    0.254511080266118, 0.194137507673419, 0.401871772097766, 
    0.370918519253672, 0.351142910239732, 0.310714862030015, 
    0.298069757042778, 0.247839120659505, 0.274977651015282, 
    0.218806234600371, 0.274977651015282, 0.218806234600371, 
    0.407912189945616, 0.376388091732588, 0.360278099029074, 
    0.31813744101535, 0.309981024667932, 0.257480792559644, 0.288133014562052, 
    0.229128691213999, 0.461803504626895, 0.337946512062839), 
    BE = c(-18.8252999999829, -21.1847940758919, -0.627509999985161, 
    -0.788704768746296, 2.51003999994065, -1.06039777353009, 
    3.12642801277324, -1.1722263305953, NA, NA, -25.1003999999772, 
    -28.4270313132134, -20.0803199999532, -23.0303260862894, 
    -16.3152600000422, -21.3725136924209, -14.4327300000154, 
    -19.2799058945922, -11.9226900000034, -18.1946901005642, 
    -27.6104399999892, -31.334467121123, -28.8654600000308, -32.3045724807506, 
    -15.0602400000719, -21.3828236816955, -11.9226900000748, 
    -17.9596938806561, -5.64759000008047, -16.4690752511992, 
    -20.0803200000245, -23.5808468844384, -23.8453800000068, 
    -34.772600686251, -25.727910000105, -33.2706429510877, -23.217870000093, 
    -29.9168843805051, -20.707830000081, -29.0829361406804)), row.names = c(NA, 
-40L), class = c("tbl_df", "tbl", "data.frame"))

# 处理BE列数据类型
cg$BE <- as.double(cg$BE)

# 筛选SCS-MP2子集
scs_mp2 <- subset(cg, Functional == 'SCS-MP2')

# 统一In的因子顺序,保证x轴显示一致
in_order <- c("Li", "Na", "K", "Rb", "Cs")
cg$In <- factor(cg$In, levels = in_order)
scs_mp2$In <- factor(scs_mp2$In, levels = in_order)

# 绘制图表
be_cg <- ggplot(cg, aes(x = In, y = BE, group = Class)) +
  # 绘制所有散点,按Functional区分颜色
  geom_point(aes(color = Functional)) +
  # 绘制SCS-MP2参考线,使用筛选后的数据集,指定粉色
  geom_line(data = scs_mp2, aes(x = In, y = BE), color = "pink", linewidth = 1) +
  # 按Basis和Class分面展示
  facet_grid(Basis ~ Class) +
  # 设置图表标签
  labs(x = "In", y = "BE", color = "Functional") +
  # 可选:统一SCS-MP2的点和线颜色,提升可读性
  scale_color_manual(values = c("B3LYP" = "black", "SCS-MP2" = "pink"))

print(be_cg)

关键修正点说明

  1. 数据源与映射规范:ggplot中统一使用列名而非data$列名的写法,避免分组和映射冲突
  2. 参考线绘制:直接使用筛选后的scs_mp2数据集绘制线条,确保每个分面中只显示对应分组的SCS-MP2数据
  3. 因子顺序统一:提前将In列转为指定顺序的因子,保证x轴元素排列一致
  4. 颜色一致性:通过scale_color_manual让SCS-MP2的散点和参考线颜色统一,便于对比观察
  5. 包加载优化:添加包安装判断,避免重复安装导致的报错

内容的提问来源于stack exchange,提问作者Moe El

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 16:17:31