1. 线性模型计算width和height
输入是基因集合
scRNA.markers <- FindAllMarkers(scRNA, only.pos = TRUE, min.pct = 0.25, logfc.threshold = 0.25)
#scRNA@misc[["markers"]]=scRNA.markers
#scRNA.markers %>% group_by(cluster) %>% top_n(n = 2, wt = avg_log2FC)
auto.markers=unique(c(
scRNA.markers %>% group_by(cluster) %>% top_n(n = 4, wt = avg_log2FC) %>% pull(gene)
))
1.width
length(auto.markers)
# x, y
# 55,15
# 87,22
# 129, 30
# lm(y~x, data=data.frame(x=c(55,87,129), y=c(15,22,30)))
# y=0.2021*x+4.0787
pdf_width = 0.2021*length(auto.markers) +4.0787
如果基因集合是自定义的list,还需要考虑list中每个key之间的间距:
pdf_width = 0.2021*length(markers |> unlist() ) +4.0787 + length(markers)*0.2 #add space between gene groups
2.pdf_height
# x,y
# 12, 4.5
# 10, 4
# lm(y~x, data=data.frame(x=c(12,10), y=c(4.5, 4)))
# y=0.25*x+1.5
pdf_height = 0.25*nlevels(sce) +1.5
message(sprintf("pdf size: {width:%s, height:%s}", pdf_width, pdf_height) )
2. 使用该模型
pdf( paste0(outputRoot, keyword, "_05_1.Auto.topN.DotPlot.pdf"), width=pdf_width, height=pdf_height)
DotPlot( sce, #subset(sce, seurat_clusters %in% c(1:8) ),
features = auto.markers, cluster.idents = F, cols=c('lightgrey', "red")) + RotatedAxis()+
ggtitle( paste0("Top N markers of ", keyword ))
#
DotPlot( sce, #subset(sce, seurat_clusters %in% c(1:8) ),
features = auto.markers, cluster.idents = T, cols=c('lightgrey', "red")) + RotatedAxis()+
ggtitle( paste0("Top N markers of ", keyword ))
dev.off()
Ref:
- https://gitee.com/dawnEve/bioToolKit/blob/dev/R_scripts/single_script/do_Seurat.script.R