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

如何在R中为不同初始C_WT值绘制时间-C_WT曲线至同一图表

问题

如何在R语言中,将vectorC_WT内不同初始C_WT值对应的时间(X轴)与C_WT(Y轴)的折线图绘制在同一个图表中?

原代码如下:

kon_WT = 1         
koff_WT = 10
R_WT =   20
Complex <- function (t,y,parms){
with(as.list(y), {

dC_WT <-  koff_WT*RL_WT -kon_WT*R_WT*C_WT 
dRL_WT <- kon_WT*R_WT*C_WT - koff_WT*RL_WT   #uM
dR_WT <-  koff_WT*RL_WT -kon_WT*R_WT*C_WT 

return(list(c(dC_WT, dRL_WT, dR_WT)))
})
}
resC_WT <- function(iC_WT) {
 times <- seq(0,1,0.01)
 Out <- ode(y = c(C_WT = iC_WT, RL_WT = 0, R_WT= R_WT), times = times, func=Complex, 
parms=NULL)
Output <- data.frame(Out)
}

vectorC_WT <- 1:11
sapply(vectorC_WT, FUN=resC_WT)
Complex1 <- as.data.frame(t(Complex1))
解决方案

首先需要把sapply返回的多个数据框合并成一个带分组标识的完整数据框,再进行绘图。

步骤1:修正数据处理逻辑

原代码中sapply返回的是列表,我们给每个子数据框添加一列标记初始C_WT值,再合并成单个数据框:

# 加载ode函数所属的deSolve包
library(deSolve)

# 保留原有参数与函数定义
kon_WT = 1         
koff_WT = 10
R_WT =   20
Complex <- function (t,y,parms){
  with(as.list(y), {
    dC_WT <-  koff_WT*RL_WT - kon_WT*R_WT*C_WT 
    dRL_WT <- kon_WT*R_WT*C_WT - koff_WT*RL_WT   
    dR_WT <-  koff_WT*RL_WT - kon_WT*R_WT*C_WT 
    return(list(c(dC_WT, dRL_WT, dR_WT)))
  })
}

resC_WT <- function(iC_WT) {
  times <- seq(0,1,0.01)
  Out <- ode(y = c(C_WT = iC_WT, RL_WT = 0, R_WT= R_WT), times = times, func=Complex, parms=NULL)
  Output <- data.frame(Out)
  # 添加初始C_WT标识列,用于后续分组绘图
  Output$initial_C_WT <- iC_WT
  return(Output)
}

vectorC_WT <- 1:11
# 用lapply生成带标识的子数据框列表,再合并为完整数据框
all_data <- do.call(rbind, lapply(vectorC_WT, resC_WT))

步骤2:绘制折线图

方法1:使用基础绘图系统

# 初始化空白画布
plot(0, 0, type = "n", xlim = range(all_data$time), ylim = range(all_data$C_WT),
     xlab = "时间", ylab = "C_WT", main = "不同初始C_WT值的时间变化曲线")

# 循环为每个初始值绘制折线
for (init_val in unique(all_data$initial_C_WT)) {
  subset_data <- subset(all_data, initial_C_WT == init_val)
  lines(subset_data$time, subset_data$C_WT, col = init_val, lwd = 2)
}

# 添加图例区分不同初始值
legend("topright", legend = unique(all_data$initial_C_WT), 
       col = unique(all_data$initial_C_WT), lwd = 2, title = "初始C_WT值")

方法2:使用ggplot2(更简洁美观)

# 先安装并加载ggplot2包(首次使用需执行install.packages("ggplot2"))
library(ggplot2)

ggplot(all_data, aes(x = time, y = C_WT, color = factor(initial_C_WT))) +
  geom_line(linewidth = 1) +
  labs(x = "时间", y = "C_WT", 
       title = "不同初始C_WT值的时间变化曲线",
       color = "初始C_WT值") +
  theme_minimal()

关键说明

  • 必须提前加载deSolve包,否则ode函数无法运行;使用ggplot2绘图时也需提前安装加载。
  • 添加initial_C_WT列是核心:它能让我们区分不同初始值对应的曲线,是同图绘制多折线的前提。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 01:50:16