gwaslab 3.6.7__tar.gz → 3.6.8__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of gwaslab might be problematic. Click here for more details.
- {gwaslab-3.6.7/src/gwaslab.egg-info → gwaslab-3.6.8}/PKG-INFO +1 -1
- {gwaslab-3.6.7 → gwaslab-3.6.8}/pyproject.toml +1 -1
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/g_version.py +2 -2
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/util/util_ex_phewwas.py +13 -3
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/viz/viz_plot_mqqplot.py +52 -8
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/viz/viz_plot_qqplot.py +8 -26
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/viz/viz_plot_trumpetplot.py +4 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8/src/gwaslab.egg-info}/PKG-INFO +1 -1
- {gwaslab-3.6.7 → gwaslab-3.6.8}/LICENSE +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/LICENSE_before_v3.4.39 +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/README.md +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/setup.cfg +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/__init__.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/bd/bd_common_data.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/bd/bd_config.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/bd/bd_download.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/bd/bd_get_hapmap3.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/bd/bd_path_manager.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/cache_manager.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/data/chrx_par/chrx_par_hg19.bed.gz +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/data/chrx_par/chrx_par_hg38.bed.gz +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/data/formatbook.json +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/data/hapmap3_SNPs/hapmap3_db150_hg19.snplist.gz +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/data/hapmap3_SNPs/hapmap3_db151_hg38.snplist.gz +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/data/high_ld/high_ld_hla_hg19.bed.gz +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/data/high_ld/high_ld_hla_hg38.bed.gz +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/data/reference.json +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/extension/ldsc/ldsc_irwls.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/extension/ldsc/ldsc_jackknife.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/extension/ldsc/ldsc_ldscore.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/extension/ldsc/ldsc_parse.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/extension/ldsc/ldsc_regressions.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/extension/ldsc/ldsc_sumstats.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/extension/prscs/prscs_gigrnd.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/extension/prscs/prscs_mcmc_gtb.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/extension/prscs/prscs_parse_genet.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/g_Log.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/g_Phenotypes.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/g_Sumstats.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/g_SumstatsMulti.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/g_SumstatsPair.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/g_SumstatsSet.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/g_SumstatsT.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/g_Sumstats_polars.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/g_Sumstats_summary.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/g_headers.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/g_meta.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/g_meta_update.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/g_vchange_status.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/g_vchange_status_polars.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/hm/hm_casting.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/hm/hm_casting_polars.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/hm/hm_harmonize_sumstats.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/hm/hm_rsid_to_chrpos.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/hm_harmonize_sumstats.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/io/io_load_ld.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/io/io_preformat_input.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/io/io_preformat_input_polars.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/io/io_process_args.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/io/io_read_ldsc.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/io/io_read_pipcs.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/io/io_read_tabular.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/io/io_to_formats.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/io/io_to_pickle.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/qc/qc_build.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/qc/qc_check_datatype.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/qc/qc_check_datatype_polars.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/qc/qc_fix_sumstats.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/qc/qc_fix_sumstats_polars.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/run_script.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/util/util_abf_finemapping.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/util/util_ex_calculate_ldmatrix.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/util/util_ex_calculate_prs.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/util/util_ex_gwascatalog.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/util/util_ex_infer_ancestry.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/util/util_ex_ldproxyfinder.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/util/util_ex_ldsc.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/util/util_ex_match_ldmatrix.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/util/util_ex_plink_filter.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/util/util_ex_process_h5.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/util/util_ex_process_ref.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/util/util_ex_run_2samplemr.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/util/util_ex_run_ccgwas.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/util/util_ex_run_clumping.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/util/util_ex_run_coloc.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/util/util_ex_run_hyprcoloc.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/util/util_ex_run_magma.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/util/util_ex_run_mesusie.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/util/util_ex_run_mtag.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/util/util_ex_run_prscs.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/util/util_ex_run_scdrs.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/util/util_ex_run_susie.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/util/util_in_calculate_gc.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/util/util_in_calculate_power.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/util/util_in_convert_h2.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/util/util_in_correct_winnerscurse.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/util/util_in_estimate_ess.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/util/util_in_fill_data.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/util/util_in_filter_value.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/util/util_in_get_density.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/util/util_in_get_sig.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/util/util_in_merge.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/util/util_in_meta.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/util/util_in_meta_polars.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/util/util_in_snphwe.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/viz/viz_aux_annotate_plot.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/viz/viz_aux_chromatin.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/viz/viz_aux_property.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/viz/viz_aux_quickfix.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/viz/viz_aux_reposition_text.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/viz/viz_aux_save_figure.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/viz/viz_plot_compare_af.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/viz/viz_plot_compare_effect.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/viz/viz_plot_credible_sets.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/viz/viz_plot_effect.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/viz/viz_plot_forestplot.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/viz/viz_plot_miamiplot.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/viz/viz_plot_miamiplot2.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/viz/viz_plot_phe_heatmap.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/viz/viz_plot_regional2.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/viz/viz_plot_regionalplot.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/viz/viz_plot_rg_heatmap.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/viz/viz_plot_scatter_with_reg.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab/viz/viz_plot_stackedregional.py +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab.egg-info/SOURCES.txt +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab.egg-info/dependency_links.txt +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab.egg-info/requires.txt +0 -0
- {gwaslab-3.6.7 → gwaslab-3.6.8}/src/gwaslab.egg-info/top_level.txt +0 -0
|
@@ -7,6 +7,11 @@ def _extract_associations(sumstats, rsid="rsID", log = Log(), verbose=True):
|
|
|
7
7
|
|
|
8
8
|
assoc, traits, studies, variants = get_associations_from_gwascatalog(sumstats, rsid=rsid, log=log, verbose=verbose)
|
|
9
9
|
|
|
10
|
+
if len(assoc)==0:
|
|
11
|
+
# if no associations
|
|
12
|
+
log.write("No associations!")
|
|
13
|
+
return None, None
|
|
14
|
+
|
|
10
15
|
assoc = _fix_beta(assoc)
|
|
11
16
|
|
|
12
17
|
traits_agg = traits.groupby("associationId")[["trait","shortForm"]].agg(lambda x: ",".join(x)).reset_index()
|
|
@@ -14,7 +19,7 @@ def _extract_associations(sumstats, rsid="rsID", log = Log(), verbose=True):
|
|
|
14
19
|
assoc_traits_agg= pd.merge(assoc, traits_agg, on ="associationId",how="left")
|
|
15
20
|
|
|
16
21
|
assoc_traits_agg= pd.merge(assoc_traits_agg, studies, on ="associationId", how="left")
|
|
17
|
-
|
|
22
|
+
|
|
18
23
|
assoc_traits_agg= pd.merge(assoc_traits_agg, variants, on ="associationId",how="left")
|
|
19
24
|
|
|
20
25
|
assoc_traits_agg = assoc_traits_agg.rename(columns={"trait":"GWASCATALOG_TRAIT",
|
|
@@ -101,7 +106,12 @@ def get_associations_from_gwascatalog(sumstats, rsid="rsID", log=Log(), verbose=
|
|
|
101
106
|
return association, traits, studies, variants
|
|
102
107
|
|
|
103
108
|
def _fix_beta(association):
|
|
104
|
-
|
|
109
|
+
if "betaNum" not in association:
|
|
110
|
+
association["betaNum"] = pd.NA
|
|
111
|
+
if "orPerCopyNum" not in association:
|
|
112
|
+
association["orPerCopyNum"] = pd.NA
|
|
113
|
+
if "range" not in association:
|
|
114
|
+
association["range"] = pd.NA
|
|
105
115
|
is_or_available = (association["betaNum"].isna()) & (~association["orPerCopyNum"].isna())
|
|
106
116
|
is_range_available = (association["betaNum"].isna()) & (association["orPerCopyNum"].isna()) & (~association["range"].isna())
|
|
107
117
|
|
|
@@ -114,4 +124,4 @@ def parse_range(x):
|
|
|
114
124
|
high = np.log(range_list[1])
|
|
115
125
|
low = np.log(range_list[0])
|
|
116
126
|
beta = (high + low)/2
|
|
117
|
-
return beta
|
|
127
|
+
return beta
|
|
@@ -100,6 +100,8 @@ def mqqplot(insumstats,
|
|
|
100
100
|
qq_scatter_args=None,
|
|
101
101
|
qqscatterargs=None,
|
|
102
102
|
qq_line_color = "grey",
|
|
103
|
+
qq_xlabels = None,
|
|
104
|
+
qq_xlim = None,
|
|
103
105
|
# region
|
|
104
106
|
region = None,
|
|
105
107
|
region_title=None,
|
|
@@ -204,6 +206,8 @@ def mqqplot(insumstats,
|
|
|
204
206
|
highlight_color="#CB132D",
|
|
205
207
|
highlight_windowkb = 500,
|
|
206
208
|
highlight_anno_args = None,
|
|
209
|
+
highlight_lim = None,
|
|
210
|
+
highlight_lim_mode = "absolute",
|
|
207
211
|
pinpoint= None,
|
|
208
212
|
pinpoint_color ="red",
|
|
209
213
|
stratified=False,
|
|
@@ -531,6 +535,8 @@ def mqqplot(insumstats,
|
|
|
531
535
|
highlight=highlight,
|
|
532
536
|
highlight_chrpos=highlight_chrpos,
|
|
533
537
|
highlight_windowkb=highlight_windowkb,
|
|
538
|
+
highlight_lim = highlight_lim,
|
|
539
|
+
highlight_lim_mode = highlight_lim_mode,
|
|
534
540
|
snpid=snpid,
|
|
535
541
|
chrom=chrom,
|
|
536
542
|
pos=pos)
|
|
@@ -1096,6 +1102,8 @@ def mqqplot(insumstats,
|
|
|
1096
1102
|
linewidth=sc_linewidth,
|
|
1097
1103
|
ytick3 = ytick3,
|
|
1098
1104
|
ylabels = ylabels,
|
|
1105
|
+
xlabels = qq_xlabels,
|
|
1106
|
+
xlim = qq_xlim,
|
|
1099
1107
|
ylabels_converted = ylabels_converted,
|
|
1100
1108
|
verbose=verbose,
|
|
1101
1109
|
qq_scatter_args=qq_scatter_args,
|
|
@@ -1335,19 +1343,38 @@ def _process_p_value(sumstats, mode,p, mlog10p, scaled, log, verbose ):
|
|
|
1335
1343
|
|
|
1336
1344
|
return sumstats
|
|
1337
1345
|
|
|
1338
|
-
def _process_highlight(sumstats, highlight, highlight_chrpos, highlight_windowkb, snpid, chrom, pos):
|
|
1346
|
+
def _process_highlight(sumstats, highlight, highlight_chrpos, highlight_windowkb, highlight_lim, highlight_lim_mode, snpid, chrom, pos):
|
|
1339
1347
|
if pd.api.types.is_list_like(highlight[0]):
|
|
1340
1348
|
if highlight_chrpos == False:
|
|
1341
1349
|
# highlight for multiple sets
|
|
1342
1350
|
for i, highlight_set in enumerate(highlight):
|
|
1343
1351
|
to_highlight = sumstats.loc[sumstats[snpid].isin(highlight_set),:]
|
|
1344
1352
|
#assign colors: 0 is hightlight color
|
|
1345
|
-
|
|
1353
|
+
#assign colors: i is highlight color
|
|
1354
|
+
for j, (index, row) in enumerate(to_highlight.iterrows()):
|
|
1346
1355
|
target_chr = int(row[chrom])
|
|
1347
1356
|
target_pos = int(row[pos])
|
|
1348
1357
|
right_chr=sumstats[chrom]==target_chr
|
|
1349
|
-
|
|
1350
|
-
|
|
1358
|
+
# Check if highlight_lim is provided for this group and SNP
|
|
1359
|
+
if (highlight_lim is not None and
|
|
1360
|
+
i < len(highlight_lim) and
|
|
1361
|
+
j < len(highlight_lim[i]) and
|
|
1362
|
+
highlight_lim[i][j] is not None):
|
|
1363
|
+
# Use custom limits for this SNP
|
|
1364
|
+
if highlight_lim_mode == "absolute":
|
|
1365
|
+
# Absolute positions: (start_pos, end_pos)
|
|
1366
|
+
start_pos, end_pos = highlight_lim[i][j]
|
|
1367
|
+
up_pos = sumstats[pos] >= start_pos
|
|
1368
|
+
low_pos = sumstats[pos] <= end_pos
|
|
1369
|
+
else:
|
|
1370
|
+
# Offset mode: (lower_kb, upper_kb) relative to SNP position
|
|
1371
|
+
lower_kb, upper_kb = highlight_lim[i][j]
|
|
1372
|
+
up_pos = sumstats[pos] > target_pos + lower_kb * 1000
|
|
1373
|
+
low_pos = sumstats[pos] < target_pos + upper_kb * 1000
|
|
1374
|
+
else:
|
|
1375
|
+
# Use default highlight_windowkb
|
|
1376
|
+
up_pos = sumstats[pos] > target_pos - highlight_windowkb * 1000
|
|
1377
|
+
low_pos = sumstats[pos] < target_pos + highlight_windowkb * 1000
|
|
1351
1378
|
sumstats.loc[right_chr&up_pos&low_pos,"HUE"]=i
|
|
1352
1379
|
else:
|
|
1353
1380
|
for i, highlight_chrpos_tuple in enumerate(highlight):
|
|
@@ -1371,13 +1398,30 @@ def _process_highlight(sumstats, highlight, highlight_chrpos, highlight_windowkb
|
|
|
1371
1398
|
else:
|
|
1372
1399
|
# highlight for one set
|
|
1373
1400
|
to_highlight = sumstats.loc[sumstats[snpid].isin(highlight),:]
|
|
1374
|
-
#assign colors: 0 is
|
|
1375
|
-
for index,row in to_highlight.iterrows():
|
|
1401
|
+
#assign colors: 0 is highlight color
|
|
1402
|
+
for j, (index, row) in enumerate(to_highlight.iterrows()):
|
|
1376
1403
|
target_chr = int(row[chrom])
|
|
1377
1404
|
target_pos = int(row[pos])
|
|
1378
1405
|
right_chr=sumstats[chrom]==target_chr
|
|
1379
|
-
|
|
1380
|
-
|
|
1406
|
+
# Check if highlight_lim is provided for this SNP
|
|
1407
|
+
if (highlight_lim is not None and
|
|
1408
|
+
j < len(highlight_lim) and
|
|
1409
|
+
highlight_lim[j] is not None):
|
|
1410
|
+
# Use custom limits for this SNP
|
|
1411
|
+
if highlight_lim_mode == "absolute":
|
|
1412
|
+
# Absolute positions: (start_pos, end_pos)
|
|
1413
|
+
start_pos, end_pos = highlight_lim[j]
|
|
1414
|
+
up_pos = sumstats[pos] >= start_pos
|
|
1415
|
+
low_pos = sumstats[pos] <= end_pos
|
|
1416
|
+
else:
|
|
1417
|
+
# Offset mode: (lower_kb, upper_kb) relative to SNP position
|
|
1418
|
+
lower_kb, upper_kb = highlight_lim[j]
|
|
1419
|
+
up_pos = sumstats[pos] > target_pos + lower_kb * 1000
|
|
1420
|
+
low_pos = sumstats[pos] < target_pos + upper_kb * 1000
|
|
1421
|
+
else:
|
|
1422
|
+
# Use default highlight_windowkb
|
|
1423
|
+
up_pos = sumstats[pos] > target_pos - highlight_windowkb * 1000
|
|
1424
|
+
low_pos = sumstats[pos] < target_pos + highlight_windowkb * 1000
|
|
1381
1425
|
sumstats.loc[right_chr&up_pos&low_pos,"HUE"]=0
|
|
1382
1426
|
return sumstats
|
|
1383
1427
|
|
|
@@ -39,6 +39,8 @@ def _plot_qq(
|
|
|
39
39
|
linewidth,
|
|
40
40
|
ytick3,
|
|
41
41
|
ylabels,
|
|
42
|
+
xlabels,
|
|
43
|
+
xlim,
|
|
42
44
|
ylabels_converted,
|
|
43
45
|
qq_scatter_args,
|
|
44
46
|
expected_min_mlog10p,
|
|
@@ -155,32 +157,12 @@ def _plot_qq(
|
|
|
155
157
|
log=log,
|
|
156
158
|
verbose=verbose
|
|
157
159
|
)
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
# step=2
|
|
165
|
-
# if ((maxticker-cut)/cutfactor + cut) > cut:
|
|
166
|
-
# if ystep == 0:
|
|
167
|
-
# if (cut - skip ) // step > 10:
|
|
168
|
-
# step = (cut - skip ) // 10
|
|
169
|
-
# else:
|
|
170
|
-
# step = ystep
|
|
171
|
-
#
|
|
172
|
-
# ax2.set_yticks([x for x in range(skip,cut-step,step)]+[cut]+[(maxticker-cut)/cutfactor + cut])
|
|
173
|
-
# ax2.set_yticklabels([x for x in range(skip,cut-step,step)]+[cut]+[maxticker],fontsize=fontsize,family=font_family)
|
|
174
|
-
# else:
|
|
175
|
-
# if ystep == 0:
|
|
176
|
-
# if (cut - skip ) // step > 10:
|
|
177
|
-
# step = (cut - skip ) // 10
|
|
178
|
-
# else:
|
|
179
|
-
# step = ystep
|
|
180
|
-
#
|
|
181
|
-
# ax2.set_yticks([x for x in range(skip,cut-step,step)]+[cut])
|
|
182
|
-
# ax2.set_yticklabels([x for x in range(skip,cut-step,step)]+[cut],fontsize=fontsize,family=font_family)
|
|
183
|
-
# ax2.set_ylim(bottom = skip)
|
|
160
|
+
if xlim is not None:
|
|
161
|
+
ax2.set_xlim(xlim)
|
|
162
|
+
|
|
163
|
+
if xlabels is not None:
|
|
164
|
+
ax2.set_xticks(xlabels)
|
|
165
|
+
ax2.set_xticklabels(xlabels,fontsize=fontsize,family=font_family)
|
|
184
166
|
|
|
185
167
|
ax2.tick_params(axis='both', which='both', labelsize=fontsize,labelfontfamily=font_family)
|
|
186
168
|
#
|
|
@@ -57,6 +57,8 @@ def plottrumpet(mysumstats,
|
|
|
57
57
|
highlight_color="#CB132D",
|
|
58
58
|
highlight_windowkb = 500,
|
|
59
59
|
highlight_anno_args = None,
|
|
60
|
+
highlight_lim = None,
|
|
61
|
+
highlight_lim_mode = "absolute",
|
|
60
62
|
pinpoint= None,
|
|
61
63
|
pinpoint_color ="red",
|
|
62
64
|
scatter_args=None,
|
|
@@ -235,6 +237,8 @@ def plottrumpet(mysumstats,
|
|
|
235
237
|
highlight=highlight,
|
|
236
238
|
highlight_chrpos=highlight_chrpos,
|
|
237
239
|
highlight_windowkb=highlight_windowkb,
|
|
240
|
+
highlight_lim=highlight_lim,
|
|
241
|
+
highlight_lim_mode=highlight_lim_mode,
|
|
238
242
|
snpid=snpid,
|
|
239
243
|
chrom=chrom,
|
|
240
244
|
pos=pos)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|