Skip to content

Commit 1b7db49

Browse files
bednarskysreichl
andauthored
Manuscript figures v1 (#63)
* Figure 1 UMAPs. Color scheme. Other setup #49 #55 * Enrichment plotting improvements, keeping filtering to keep top terms #49 #52 #55 * Split into smk rulefiles per dataset (rather than per figure) #49 #52 #55 * Enrichment plots: Select only terms from bone marrow or PBMC. Sort by developmental hierarchy. Two terms per cell type to allow for more overlap #49 #52 #55 * Add modality in title of each plot #49 #52 #55 * Enrichment terms abbreviations #49 #52 #55 * Don't remove levels, since this make duplicate terms #49 #52 #55 * First draft logFC heatmap #49 #52 #55 * Enrichment heatmap labelling improvements & removal of tiny dots #49 #52 #55 * Differentially accessible genes (max region per gene) #49 $52 #55 * Differentially accessible regions #49 $52 #55 * Enrichment analysis axis label improvement #49 #52 #55 * Add downregulated differential features #49 #52 #55 * Labelling improvements #49 #52 #55 * Final heatmap manually ordered by cell type #49 #52 #55 * Data driven reordering with dendsort #49 #52 #55 * Improve cell type colors. Add clustering methods to ggheatmap from ggalign. #49 #52 #55 * Patchworked differential heatmap for RNA #49 #52 #55 * Handcrafted marker labelling function for differential heatmap #49 #52 #55 * Adapt differential heatmap for ATAC (mapping regions to genenames, keeping duplicates, subsetting markers) #49 #52 #55 * Test marker annotation passed #49 #52 #55 * differential heatmap: colors on top, text labels, marker annot for RNA good spacing, labels not cut off #49 #52 #55 * If too many markers, choose unique top markers per cell type #49 #52 #55 * Cuttree into clusters of genes, then sort by x axis order of cell types, to get data driven diagonal heatmap #49 #52 #55 * Add title to differential heatmap #49 #52 #55 * Better layout for heatmap #49 #52 #55 * Already nice crossprediction plot with automatic layout #49 #52 #55 * Already nice crossprediction plot with hierarchical layout #49 #52 #55 * Add lines for missing edges #49 #52 #55 * Color additional edges compared to Corces grey. Add legend #49 #52 #55 * Modualrize crossprediction plot and apply to ATAC data #49 #52 #55 * Code layout #49 #52 #55 * EP vs TA scatterplot v1 #49 #52 #55 * Rasterize epi potential scatterplots #56 * Umap for integrated and unintegrated #56 * CFA plots #56 * Figure 2 fix text and image size #52 * Figure 3 fix text and image size #56 * First draft INT GSEA heatmap #56 * INT GSEA heatmap improvements #56 * INT GSEA heatmap for Reactome in addition to GOBP #56 * Reload RNA figures script that was deleted by accident * TF plot Mono v1 #56 * TF plot HSC and Mono v2 #56 * Prioritise papalexi TFs #56 * Color code TF EP TA overlap between cell types. Boldness code overlap with Papalexi dataset. #56 * Papalexi UMAPs and first draft cross prediction #61 * Papalexi crossprediction plot #61 * Lollipop plot for TA KO enrichment. Better titles. #61 * Prepare for file syncing to local * Cell cycle umaps #61 * Bubble plot for all TF enrichments in TA #61 * Differential heatmap KO signatures #61 * GSEA bubble plot Papalexi #61 * Snakemakify figures.smk #62 * Update CorcesINT unsupervised annot to match main #62 * Bug fixes: Wrong paths etc #62 --------- Co-authored-by: Stephan Reichl <53785552+sreichl@users.noreply.github.com>
1 parent a6f5926 commit 1b7db49

11 files changed

Lines changed: 3096 additions & 329 deletions

File tree

.gitignore

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,14 @@ metadata/
156156
*/.snakemake/*
157157
.snakemake/
158158

159+
paper
160+
159161
# macOS specific files
160162
*DS_Store*
161-
._*
163+
._*
164+
165+
# vscode
166+
settings.json
167+
168+
# just a helper, don't want to sync this
169+
rsync_input_files_to_local.sh

config/config.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ project_name: "MrBiomics"
88

99
#### Datasets and Workflows to include ###
1010
workflows:
11-
quickstart:
12-
enrichment_analysis: "config/quickstart/quickstart_enrichment_analysis_config.yaml"
11+
# quickstart:
12+
# enrichment_analysis: "config/quickstart/quickstart_enrichment_analysis_config.yaml"
1313
digits:
1414
unsupervised_analysis: "config/digits/digits_unsupervised_analysis_config.yaml"
1515
CorcesRNA:

workflow/Snakefile

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ include: os.path.join("rules", "CorcesATAC.smk")
3838
include: os.path.join("rules", "CorcesINT.smk")
3939
include: os.path.join("rules", "Papalexi2021scCRISPR.smk")
4040
include: os.path.join("rules", "docs.smk")
41-
41+
include: os.path.join("rules", "figures.smk")
4242

4343
#### Target Rule ####
4444
rule all:
@@ -81,10 +81,15 @@ rule all:
8181
rules.Papalexi2021scCRISPR_enrichment_analysis_all.input,
8282
rules.Papalexi2021scCRISPR_functional_similarity.output, # custom rule
8383
#### Custom rules used only for docs/wiki (keep commented) ####
84-
rules.CorcesRNA_plots.output,
85-
rules.CorcesATAC_plots.output,
86-
# rules.Papalexi2021scCRISPR_plots.output,
84+
# rules.CorcesRNA_plots.output,
85+
# rules.CorcesATAC_plots.output,
8786
# rules.CorcesINT_plots.output,
87+
# rules.Papalexi2021scCRISPR_plots.output,
88+
#### Figures ####
89+
rules.CorcesRNA_figures.output,
90+
rules.CorcesATAC_figures.output,
91+
rules.CorcesINT_figures.output,
92+
rules.Papalexi_figures.output,
8893
default_target: True # important for module usage
8994
threads: 1
9095
resources:

workflow/envs/ggplot.yaml

Lines changed: 29 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,34 @@
1+
name: ggplot
12
channels:
23
- conda-forge
34
- bioconda
45
- nodefaults
56
dependencies:
6-
- r-ggplot2
7-
- r-tidyr
8-
- r-tibble
9-
- r-patchwork
10-
- r-scales
11-
- r-dplyr
12-
- r-reshape2
13-
- r-pheatmap
14-
- r-ggrepel
15-
- r-stringr
16-
- r-gridGraphics
17-
- r-ggplotify
18-
- r-directlabels
19-
- r-data.table
20-
- r-svglite
21-
- r-sna
22-
- r-RColorBrewer
23-
- r-Hmisc
24-
- r-cairo
25-
- cairo
26-
- pango
27-
- libpng
28-
- libjpeg-turbo
29-
- libtiff
30-
- gtk2
7+
- r-ggplot2=3.5
8+
- r-ggdendro=0.2
9+
- r-ggrepel=0.9
10+
- r-ggrastr=1.0
11+
- r-dendsort=0.3
12+
- r-tidyr=1.3
13+
- r-tibble=3.3
14+
- r-patchwork=1.3
15+
- r-scales=1.4
16+
- r-dplyr=1.1
17+
- r-reshape2=1.4
18+
- r-stringr=1.5
19+
- r-gridgraphics=0.5
20+
- r-ggplotify=0.1
21+
- r-directlabels=2025.6
22+
- r-data.table=1.17
23+
- r-svglite=2.1
24+
- r-sna=2.8
25+
- r-rcolorbrewer=1.1
26+
- r-hmisc=5.2
27+
- r-cairo=1.6
28+
- cairo=1.18
29+
- pango=1.56
30+
- libpng=1.6
31+
- libjpeg-turbo=3.1
32+
- libtiff=4.7
33+
- gtk2=2.24
34+
- r-ggtext=0.1

workflow/rules/figures.smk

Lines changed: 125 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,26 @@
11
# Snakemake file for creating the figure for the manuscript
2-
3-
# TODO: think of sensible place to put plots? maybe MrBiomics/docs/figure1 or MrBiomics/results/figures?
4-
5-
#### CorcesRNA - Figures (custom rule) ####
2+
#### CorcesRNA - Figure panels (custom rule) ####
63
rule CorcesRNA_figures:
74
input:
5+
umap_coords = os.path.join("results/CorcesRNA/unsupervised_analysis/normCQN_integrated/UMAP/UMAP_correlation_15_0.1_2_data.csv"),
6+
dea_ova = os.path.join("results/CorcesRNA/dea_limma/normCQN_OvA_cell_type/results.csv"),
87
enrichment_results = os.path.join("results/CorcesRNA/enrichment_analysis/cell_types/preranked_GSEApy/Azimuth_2023/cell_types_Azimuth_2023_all.csv"),
98
crossprediction_adj_mtx = os.path.join("results/CorcesRNA/special_analyses/crossprediction/adjacency_matrix.csv"),
109
output:
11-
enrichment_plot = os.path.join("docs/CorcesRNA/enrichment_analysis.pdf"),
12-
crossprediction_plot = os.path.join("docs/CorcesRNA/crossprediction_plot.pdf"),
10+
umap_plot = os.path.join("paper/CorcesRNA/umap.pdf"),
11+
dea_heatmap_plot = os.path.join("paper/CorcesRNA/differential_heatmap.pdf"),
12+
enrichment_plot = os.path.join("paper/CorcesRNA/enrichment.pdf"),
13+
crossprediction_plot = os.path.join("paper/CorcesRNA/crossprediction.pdf"),
14+
crossprediction_coordinates = os.path.join("paper/CorcesRNA/crossprediction_coordinates.csv"),
1315
params:
1416
figure_theme_path = workflow.source_path("../scripts/figure_theme.R"),
15-
adj_p = 0.05, # unused
17+
figure_utils_path = workflow.source_path("../scripts/figure_utils.R"),
18+
# enrichment analysis
19+
fdr_threshold = 0.05,
20+
log2FC_threshold = 3,
21+
# lineage reconstructions
22+
lineage_tree_cut_off = 0.07,
23+
hierarchy_coordinates = True
1624
resources:
1725
mem_mb=config.get("mem", "16000"),
1826
threads: config.get("threads", 1)
@@ -22,3 +30,113 @@ rule CorcesRNA_figures:
2230
os.path.join("logs","rules","CorcesRNA_figures.log"),
2331
script:
2432
"../scripts/CorcesRNA_figures.R"
33+
34+
#### CorcesATAC - Figure panels (custom rule) ####
35+
rule CorcesATAC_figures:
36+
input:
37+
umap_coords = os.path.join("results/CorcesATAC/unsupervised_analysis/normCQN_integrated/UMAP/UMAP_correlation_15_0.1_2_data.csv"),
38+
dea_ova = os.path.join("results/CorcesATAC/dea_limma/normCQN_OvA_cell_type/results.csv"),
39+
enrichment_results = os.path.join("results/CorcesATAC/enrichment_analysis/cell_types_up/GREAT/Azimuth_2023/cell_types_up_Azimuth_2023_all.csv"),
40+
crossprediction_adj_mtx = os.path.join("results/CorcesATAC/special_analyses/crossprediction/adjacency_matrix.csv"),
41+
output:
42+
umap_plot = os.path.join("paper/CorcesATAC/umap.pdf"),
43+
dea_heatmap_plot = os.path.join("paper/CorcesATAC/differential_heatmap.pdf"),
44+
enrichment_plot = os.path.join("paper/CorcesATAC/enrichment.pdf"),
45+
crossprediction_plot = os.path.join("paper/CorcesATAC/crossprediction.pdf"),
46+
crossprediction_coordinates = os.path.join("paper/CorcesATAC/crossprediction_coordinates.csv"),
47+
params:
48+
figure_theme_path = workflow.source_path("../scripts/figure_theme.R"),
49+
figure_utils_path = workflow.source_path("../scripts/figure_utils.R"),
50+
fdr_threshold = 0.05,
51+
log2FC_threshold = 3,
52+
lineage_tree_cut_off = 0.2,
53+
hierarchy_coordinates = True
54+
resources:
55+
mem_mb=config.get("mem", "16000"),
56+
threads: config.get("threads", 1)
57+
conda:
58+
"../envs/ggplot.yaml"
59+
log:
60+
os.path.join("logs","rules","CorcesATAC_figures.log"),
61+
script:
62+
"../scripts/CorcesATAC_figures.R"
63+
64+
# #### CorcesINT - Figure panels (custom rule) ####
65+
rule CorcesINT_figures:
66+
input:
67+
unintegrated_umap_coords = os.path.join("results/CorcesINT/unsupervised_analysis/normupperquartile/UMAP/UMAP_correlation_15_0.1_2_data.csv"),
68+
integrated_umap_coords = os.path.join("results/CorcesINT/unsupervised_analysis/normupperquartile_integrated/UMAP/UMAP_correlation_15_0.1_2_data.csv"),
69+
unintegrated_cfa = os.path.join("results/CorcesINT/spilterlize_integrate/all/normupperquartile_CFA.csv"),
70+
integrated_cfa = os.path.join("results/CorcesINT/spilterlize_integrate/all/normupperquartile_integrated_CFA.csv"),
71+
norm_counts = os.path.join("results/CorcesINT/spilterlize_integrate/all/normupperquartile_integrated.csv"),
72+
metadata = os.path.join("results/CorcesINT/spilterlize_integrate/all/annotation.csv"),
73+
dea_results = os.path.join("results/CorcesINT/dea_limma/normupperquartile_integrated/results.csv"),
74+
gene_annotation = os.path.join("results/CorcesRNA/rnaseq_pipeline/counts/gene_annotation.csv"),
75+
GO_enrichment_results = os.path.join("results/CorcesINT/enrichment_analysis/cell_types/preranked_GSEApy/GO_Biological_Process_2025/cell_types_GO_Biological_Process_2025_all.csv"),
76+
Reactome_enrichment_results = os.path.join("results/CorcesINT/enrichment_analysis/cell_types/preranked_GSEApy/ReactomePathways/cell_types_ReactomePathways_all.csv"),
77+
Mono_TF_EP = os.path.join("results/CorcesINT/enrichment_analysis/Mono_EP/RcisTarget/hg38_500bp_up_100bp_down_v10clust/Mono_EP_hg38_500bp_up_100bp_down_v10clust.csv"),
78+
Mono_TF_TA = os.path.join("results/CorcesINT/enrichment_analysis/Mono_TA/RcisTarget/hg38_500bp_up_100bp_down_v10clust/Mono_TA_hg38_500bp_up_100bp_down_v10clust.csv"),
79+
HSC_TF_EP = os.path.join("results/CorcesINT/enrichment_analysis/HSC_EP/RcisTarget/hg38_500bp_up_100bp_down_v10clust/HSC_EP_hg38_500bp_up_100bp_down_v10clust.csv"),
80+
HSC_TF_TA = os.path.join("results/CorcesINT/enrichment_analysis/HSC_TA/RcisTarget/hg38_500bp_up_100bp_down_v10clust/HSC_TA_hg38_500bp_up_100bp_down_v10clust.csv"),
81+
output:
82+
unintegrated_cfa_plot = os.path.join("paper/CorcesINT/unintegrated_cfa.pdf"),
83+
integrated_cfa_plot = os.path.join("paper/CorcesINT/integrated_cfa.pdf"),
84+
integrated_umap_plot = os.path.join("paper/CorcesINT/integrated_umap.pdf"),
85+
unintegrated_umap_plot = os.path.join("paper/CorcesINT/unintegrated_umap.pdf"),
86+
epigenetic_scatter_dir = directory(os.path.join("paper/CorcesINT/correlation_plots")),
87+
GO_enrichment_plot = os.path.join("paper/CorcesINT/GO_enrichment.pdf"),
88+
Reactome_enrichment_plot = os.path.join("paper/CorcesINT/Reactome_enrichment.pdf"),
89+
TF_plot = os.path.join("paper/CorcesINT/TF_lollipop.pdf"),
90+
params:
91+
figure_theme_path = workflow.source_path("../scripts/figure_theme.R"),
92+
figure_utils_path = workflow.source_path("../scripts/figure_utils.R"),
93+
# thresholds for EP/TA categorization
94+
adjp_th = 0.05,
95+
fdr_threshold = 0.05,
96+
lfc_th = 1,
97+
ave_expr_th = 0,
98+
max_genes_tf_plot = 25
99+
resources:
100+
mem_mb=config.get("mem", "16000"),
101+
threads: config.get("threads", 1)
102+
conda:
103+
"../envs/ggplot.yaml"
104+
log:
105+
os.path.join("logs","rules","CorcesINT_figures.log"),
106+
script:
107+
"../scripts/CorcesINT_figures.R"
108+
109+
#### Papalexi - Figure panels (custom rule) ####
110+
rule Papalexi_figures:
111+
input:
112+
CORRECTED_umap_coords = os.path.join("results/Papalexi2021scCRISPR/unsupervised_analysis/merged_CORRECTED/UMAP/UMAP_correlation_10_0.1_2_data.csv"),
113+
CORRECTED_metadata = os.path.join("results/Papalexi2021scCRISPR/scrnaseq_processing_seurat/merged/CORRECTED/metadata.csv"),
114+
MIXSCAPE_umap_coords = os.path.join("results/Papalexi2021scCRISPR/unsupervised_analysis/merged_MIXSCAPE_LDA/UMAP/UMAP_correlation_10_0.1_2_data.csv"),
115+
MIXSCAPE_metadata = os.path.join("results/Papalexi2021scCRISPR/mixscape_seurat/merged/FILTERED_metadata.csv"),
116+
KO_crossprediction_adj_mtx = os.path.join("results/Papalexi2021scCRISPR/special_analyses/crossprediction/adjacency_matrix.csv"),
117+
SPI1_TA_results = os.path.join("results/Papalexi2021scCRISPR/enrichment_analysis/SPI1/preranked_GSEApy/Corces_TA_signatures/SPI1_Corces_TA_signatures.csv"),
118+
KO_DEA_results = os.path.join("results/Papalexi2021scCRISPR/dea_seurat/KO_mixscape/results.csv"),
119+
KO_enrichment_results_GOBP = os.path.join("results/Papalexi2021scCRISPR/enrichment_analysis/KO/preranked_GSEApy/GO_Biological_Process_2025/KO_GO_Biological_Process_2025_all.csv"),
120+
KO_enrichment_results_Reactome = os.path.join("results/Papalexi2021scCRISPR/enrichment_analysis/KO/preranked_GSEApy/ReactomePathways/KO_ReactomePathways_all.csv"),
121+
output:
122+
umap_corrected_fig = os.path.join("paper/Papalexi/umap_CORRECTED.pdf"),
123+
umap_lda_fig = os.path.join("paper/Papalexi/umap_LDA.pdf"),
124+
crossprediction_fig = os.path.join("paper/Papalexi/crossprediction.pdf"),
125+
spi1_ta_lollipop_fig = os.path.join("paper/Papalexi/SPI1_TA_lollipop.pdf"),
126+
ko_DEA_heatmap_fig = os.path.join("paper/Papalexi/KO_DEA_heatmap.pdf"),
127+
ko_enrichment_GOBP_fig = os.path.join("paper/Papalexi/KO_enrichment_GOBP_bubbleplot.pdf"),
128+
params:
129+
figure_theme_path = workflow.source_path("../scripts/figure_theme.R"),
130+
figure_utils_path = workflow.source_path("../scripts/figure_utils.R"),
131+
ko_column = "gene",
132+
phase_column = "Phase",
133+
fdr_threshold = 0.05
134+
resources:
135+
mem_mb=config.get("mem", "16000"),
136+
threads: config.get("threads", 1)
137+
conda:
138+
"../envs/ggplot.yaml"
139+
log:
140+
os.path.join("logs","rules","Papalexi_figures.log"),
141+
script:
142+
"../scripts/Papalexi_figures.R"
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
# set correct working directory -> project/repo folder (only for dev, not prod)
2+
# getwd()
3+
# setwd('..')
4+
# getwd()
5+
6+
#### libraries
7+
# source this for libraries, MrBiomics theme and utility functions
8+
source(snakemake@params[["figure_theme_path"]])
9+
source(snakemake@params[["figure_utils_path"]])
10+
11+
# FIXME snakemakeify
12+
# ## libraries are loaded in the source files
13+
# source(snakemake@params[["figure_theme_path"]])
14+
# ## input
15+
# enrichment_results_path <- snakemake@input[["enrichment_results"]]
16+
# ## output
17+
# enrichment_plot_path <- snakemake@output[["enrichment_plot"]]
18+
# ## params
19+
# fdr_threshold <- snakemake@params[["fdr_threshold"]]
20+
21+
# inputs
22+
CorcesATAC_umap_coords_path <- snakemake@input[["umap_coords"]]
23+
CorcesATAC_dea_OvA_path <- snakemake@input[["dea_ova"]]
24+
CorcesATAC_enrichment_results_path <- snakemake@input[["enrichment_results"]]
25+
CorcesATAC_crossprediction_adj_mtx_path <- snakemake@input[["crossprediction_adj_mtx"]]
26+
27+
# outputs
28+
atac_umap_path <- snakemake@output[["umap_plot"]]
29+
atac_dea_heatmap_path <- snakemake@output[["dea_heatmap_plot"]]
30+
atac_enrichment_path <- snakemake@output[["enrichment_plot"]]
31+
atac_crossprediction_path <- snakemake@output[["crossprediction_plot"]]
32+
atac_crossprediction_coordinates_path <- snakemake@output[["crossprediction_coordinates"]]
33+
34+
# params
35+
fdr_threshold <- snakemake@params[["fdr_threshold"]]
36+
log2FC_threshold <- snakemake@params[["log2FC_threshold"]]
37+
lineage_tree_cut_off <- snakemake@params[["lineage_tree_cut_off"]]
38+
hierarchy_coordinates <- snakemake@params[["hierarchy_coordinates"]]
39+
######### UMAPs (from unsupervised analysis) ############
40+
# Create UMAP plots
41+
atac_umap_plot <- umap_plot(CorcesATAC_umap_coords_path, atac_umap_path, title = "ATAC")
42+
43+
44+
######### DEA HEATMAP ############
45+
atac_dea_heatmap_plot <- plot_differential_features_heatmap(
46+
dea_results_path = CorcesATAC_dea_OvA_path,
47+
fig_path = atac_dea_heatmap_path,
48+
fdr_threshold = fdr_threshold,
49+
log2FC_threshold = log2FC_threshold,
50+
title = "ATAC",
51+
feature = 'Regions',
52+
ct_clst_dist = "euclidean",
53+
ct_clst_method = "ward.D2",
54+
feature_clst_dist = "maximum",
55+
feature_clst_method = "ward.D2",
56+
q_mask = 0.025,
57+
label_box_size_factor = 1
58+
)
59+
60+
61+
######### ENRICHMENT HEATMAP ############
62+
create_atac_enrichment_df <- function(enrichment_results_path, fdr_threshold = 0.05) {
63+
# Load enrichment analysis result
64+
df <- data.frame(fread(file.path(enrichment_results_path), header=TRUE))
65+
66+
# Adapt for ATAC data
67+
df_formatted <- df %>%
68+
rename(Term = description, statistic = p_adjust, score = fold_enrichment) %>%
69+
mutate(name = sub("_up$", "", name),
70+
score = ifelse(is.infinite(log2(score)), NaN, log2(score))) %>%
71+
mutate(name = recode(name, !!!DATA_TO_CELL_TYPE_COLORS_MAPPING))
72+
73+
return(df_formatted)
74+
}
75+
76+
atac_df_formatted <- create_atac_enrichment_df(CorcesATAC_enrichment_results_path, fdr_threshold)
77+
atac_heatmap_df <- prepare_for_heatmap(df_formatted = atac_df_formatted,
78+
fdr_threshold = fdr_threshold,
79+
tissues_to_keep = c("PBMC", "Bone Marrow"))
80+
atac_enrichment_plot <- plot_enrichment_heatmap(
81+
heatmap_df = atac_heatmap_df,
82+
fig_path = atac_enrichment_path,
83+
fill_lab = "log2(FE)",
84+
size_lab = "-log10(p-adj.)",
85+
title = "ATAC",
86+
ylabel = "Enrichment term\n(GREAT, Azimuth 2023)"
87+
)
88+
89+
90+
######### Lineage reconstruction using crossprediction ############
91+
# plot adapted from: https://gist.github.com/dsparks/4331058
92+
93+
94+
atac_crosspred_p <- plot_crossprediction_from_adjacency(
95+
adjacency_matrix_path = CorcesATAC_crossprediction_adj_mtx_path,
96+
fig_path = atac_crossprediction_path,
97+
coordinates_out_path = atac_crossprediction_coordinates_path,
98+
lineage_tree_cut_off = lineage_tree_cut_off,
99+
hierarchy_coordinates = hierarchy_coordinates,
100+
modality_label = "ATAC",
101+
)

0 commit comments

Comments
 (0)