如何仅显示ZIP协同得分≥1的数据行?synergyfinder绘图问题
解决SynergyFinder+ggplot仅展示ZIP协同得分≥1的柱状图问题
问题核心
SynergyFinder处理后返回的res是一个多组件列表对象,并非标准数据框,直接用dplyr::filter会因无法识别对象结构报错。需要先提取其中存储协同得分的标准数据框,再进行筛选。
解决方案步骤
- 提取协同得分数据框:从
res对象中取出synergy_scores(这是CalculateSynergy计算后生成的标准数据框,包含所有药物组合的ZIP得分) - 筛选目标数据:用
filter保留ZIP >= 1的行 - 基于筛选后数据绘图:将筛选后的数据集传入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))
效果图对比
- 当前全数据图:
- 目标筛选后图:
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

