我实在是想不到作为一个科研服务公司,安捷伦的 Wave 软件导出的 Summary 分辨率如此感人。dpi 是每个科研人的脸面,然而 Summary 功能真的是花架子般形同虚设,软件界面做得那么好但是 Summary 就是没有好好传承,也难怪我所见到的 paper 里的折线图都不是 Wave 所导出的那种风格,逼得生信人操着ggplot
亲自下场用R语言写一个绘图代码。
library(readxl)
# 读取实验数据,使用经过标准化的测量数据 ####
dat <- readxl::read_xlsx('XF Cell Mito Stress Test.xlsx', sheet = 'Normalized Rate')
# 去除不用的孔和背景孔
dat <- dat[! dat$Group %in% c("Unassigned", "Background"),]
# 求同一测量时间点的重复孔的读数平均值 ####
drawDat <- do.call(rbind, lapply(unique(dat$Time), function(timing) {
b <- do.call(rbind, lapply(unique(dat$Group), function(group) {
records <- dat[dat$Time == timing & dat$Group == group,]
return(data.frame(
Group = group,
Time = timing,
OCR = mean(records$OCR),
ECAR = mean(records$ECAR),
SD.OCR = sd(records$OCR),
SD.ECAR = sd(records$ECAR)
))
}))
return(b)
}))
# 分组及配色 ####
# 再次分组的意义在于规定图例中分组摆放的先后次序,组名需要和 Excel 文件中的一致
maps <- data.frame(
Color = c("#FF4500","#6495ED","gray"),
Group = c("组1", "组2", "对照组")
)
# 强制按照 maps$Group 顺序绘图 ####
drawDat$Group <- factor(drawDat$Group,
levels = maps$Group)
library(ggplot2)
# 折线图线条粗细 ####
lineThick = 1
# 加药线颜色 ####
bdColor <- '#FFA500'
# OCR ####
ggplot(data = drawDat, aes(x = Time, y = OCR, color = Group, shape=Group)) +
geom_point(aes(color = Group), size=lineThick+2) + geom_line(size=lineThick) +
labs(x="时间(分)",y="OCR (pmol/分/千细胞)",color="分组", shape="分组") +
scale_x_continuous(breaks = seq(0, 100, by = 10)) +
geom_errorbar(aes(ymin = OCR - SD.OCR, ymax = OCR + SD.OCR), size=lineThick, width = lineThick) +
scale_color_manual(values = pal) +
coord_cartesian(expand=0) +
geom_vline(xintercept=20, colour = bdColor, size=lineThick,linetype="twodash") +
geom_text(aes(x=23.5, label="寡霉素", y=21), colour=bdColor) +
geom_vline(xintercept=46, colour = bdColor, size=lineThick,linetype="twodash") +
geom_text(aes(x=49.5, label="解偶剂", y=21), colour=bdColor) +
geom_vline(xintercept=71, colour = bdColor, size=lineThick,linetype="twodash") +
geom_text(aes(x=78, label="鱼藤酮/抗霉素A", y=21), colour=bdColor)
ggsave('seahorse_OCR.tiff', dpi=300)
# ECAR ####
ggplot(data = drawDat, aes(x = Time, y = ECAR, color = Group, shape=Group)) +
geom_point(aes(color = Group), size=lineThick+2) + geom_line(size=lineThick) +
labs(x="时间(分)",y="ECAR (pmol/分/千细胞)",color="分组", shape="分组") +
scale_x_continuous(breaks = seq(0, 100, by = 10)) +
geom_errorbar(aes(ymin = ECAR - SD.ECAR, ymax = ECAR + SD.ECAR), size=lineThick, width = lineThick) +
scale_color_manual(values = pal) +
coord_cartesian(expand=0) +
geom_vline(xintercept=20, colour = bdColor, size=lineThick,linetype="twodash") +
geom_text(aes(x=23.5, label="寡霉素", y=1.25), colour=bdColor) +
geom_vline(xintercept=46, colour = bdColor, size=lineThick,linetype="twodash") +
geom_text(aes(x=49.5, label="解偶剂", y=1.25), colour=bdColor) +
geom_vline(xintercept=71, colour = bdColor, size=lineThick,linetype="twodash") +
geom_text(aes(x=78, label="鱼藤酮/抗霉素A", y=1.25), colour=bdColor)
ggsave('seahorse_ECAR.tiff', dpi=300)
目前缺陷在于加药线的位置需要手动指定,因为位置相关数据不在Normalized Rate
这个 sheet 里,而是在运行记录中,需要用时间来推算。感兴趣的可自行完善。自己改改数据调整位置也能凑合。