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

如何仅显示ZIP协同得分≥1的数据行?synergyfinder绘图问题

解决SynergyFinder+ggplot仅展示ZIP协同得分≥1的柱状图问题

问题核心

SynergyFinder处理后返回的res是一个多组件列表对象,并非标准数据框,直接用dplyr::filter会因无法识别对象结构报错。需要先提取其中存储协同得分的标准数据框,再进行筛选。

解决方案步骤

  1. 提取协同得分数据框:从res对象中取出synergy_scores(这是CalculateSynergy计算后生成的标准数据框,包含所有药物组合的ZIP得分)
  2. 筛选目标数据:用filter保留ZIP >= 1的行
  3. 基于筛选后数据绘图:将筛选后的数据集传入ggplot生成柱状图

修改后的完整代码

library(synergyfinder)
library(ggplot2)
library(dplyr)

# 1. 原始数据预处理(保留你的原有流程)
data <- read.csv("your_data_path.csv")
res <- ReshapeData(data, data_type = "viability", method = "ZIP")
res <- CalculateSynergy(res)

# 2. 提取并筛选ZIP得分≥1的数据
filtered_synergy <- res$synergy_scores %>%
  filter(ZIP >= 1)

# 3. 绘制目标柱状图
ggplot(filtered_synergy, aes(x = Combination, y = ZIP)) +
  geom_col(fill = "#4682B4") + # 可自定义填充色
  labs(title = "多药组合ZIP协同得分(≥1)", 
       x = "药物组合", 
       y = "ZIP协同得分") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) # 旋转x轴标签避免重叠

关键说明

  • 若未执行CalculateSynergy,res中不会生成synergy_scores字段,必须先运行该函数计算协同得分
  • 若res对象中存储协同得分的字段不是synergy_scores,可以用str(res)查看对象结构,定位对应的数据框字段

示例数据(替换为你的实际dput输出)

# 你的数据dput示例
dput(res$synergy_scores)
structure(list(Combination = c("DrugX+DrugY", "DrugY+DrugZ", "DrugX+DrugZ"), 
               ZIP = c(0.8, 1.3, 1.7), 
               Bliss = c(0.6, 1.1, 1.5)), 
          class = "data.frame", row.names = c(NA, -3L))

效果图对比

  • 当前全数据图:包含所有数据的柱状图
  • 目标筛选后图:仅ZIP≥1的柱状图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 22:37:03