我實在是想不到作爲一個科研服務公司,安捷倫的 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 裏,而是在運行記錄中,需要用時間來推算。感興趣的可自行完善。自己改改數據調整位置也能湊合。