pylocuszoom 0.5.0__py3-none-any.whl → 0.6.0__py3-none-any.whl
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.
- pylocuszoom/__init__.py +23 -2
- pylocuszoom/backends/base.py +86 -0
- pylocuszoom/backends/bokeh_backend.py +116 -20
- pylocuszoom/backends/matplotlib_backend.py +69 -0
- pylocuszoom/backends/plotly_backend.py +115 -23
- pylocuszoom/colors.py +41 -0
- pylocuszoom/forest.py +37 -0
- pylocuszoom/loaders.py +35 -17
- pylocuszoom/phewas.py +35 -0
- pylocuszoom/plotter.py +258 -4
- pylocuszoom/recombination.py +45 -31
- pylocuszoom/schemas.py +37 -26
- {pylocuszoom-0.5.0.dist-info → pylocuszoom-0.6.0.dist-info}/METADATA +53 -5
- pylocuszoom-0.6.0.dist-info/RECORD +26 -0
- pylocuszoom-0.5.0.dist-info/RECORD +0 -24
- {pylocuszoom-0.5.0.dist-info → pylocuszoom-0.6.0.dist-info}/WHEEL +0 -0
- {pylocuszoom-0.5.0.dist-info → pylocuszoom-0.6.0.dist-info}/licenses/LICENSE.md +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pylocuszoom
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.6.0
|
|
4
4
|
Summary: Publication-ready regional association plots with LD coloring, gene tracks, and recombination overlays
|
|
5
5
|
Project-URL: Homepage, https://github.com/michael-denyer/pylocuszoom
|
|
6
6
|
Project-URL: Documentation, https://github.com/michael-denyer/pylocuszoom#readme
|
|
@@ -26,13 +26,17 @@ Requires-Dist: loguru>=0.7.0
|
|
|
26
26
|
Requires-Dist: matplotlib>=3.5.0
|
|
27
27
|
Requires-Dist: numpy>=1.21.0
|
|
28
28
|
Requires-Dist: pandas>=1.4.0
|
|
29
|
-
Requires-Dist: plotly>=5.
|
|
29
|
+
Requires-Dist: plotly>=5.15.0
|
|
30
30
|
Requires-Dist: pydantic>=2.0.0
|
|
31
31
|
Requires-Dist: pyliftover>=0.4
|
|
32
|
+
Requires-Dist: requests>=2.25.0
|
|
33
|
+
Requires-Dist: tqdm>=4.60.0
|
|
32
34
|
Provides-Extra: all
|
|
33
35
|
Requires-Dist: pyspark>=3.0.0; extra == 'all'
|
|
34
36
|
Provides-Extra: dev
|
|
35
37
|
Requires-Dist: pytest-cov>=4.0.0; extra == 'dev'
|
|
38
|
+
Requires-Dist: pytest-randomly>=3.0.0; extra == 'dev'
|
|
39
|
+
Requires-Dist: pytest-xdist>=3.0.0; extra == 'dev'
|
|
36
40
|
Requires-Dist: pytest>=7.0.0; extra == 'dev'
|
|
37
41
|
Requires-Dist: ruff>=0.1.0; extra == 'dev'
|
|
38
42
|
Provides-Extra: spark
|
|
@@ -73,9 +77,11 @@ Inspired by [LocusZoom](http://locuszoom.org/) and [locuszoomr](https://github.c
|
|
|
73
77
|
2. **Stacked plots**: Compare multiple GWAS/phenotypes vertically
|
|
74
78
|
3. **eQTL plot**: Expression QTL data aligned with association plots and gene tracks
|
|
75
79
|
4. **Fine-mapping plots**: Visualize SuSiE credible sets with posterior inclusion probabilities
|
|
76
|
-
5. **
|
|
77
|
-
6. **
|
|
78
|
-
7. **
|
|
80
|
+
5. **PheWAS plots**: Phenome-wide association study visualization across multiple phenotypes
|
|
81
|
+
6. **Forest plots**: Meta-analysis effect size visualization with confidence intervals
|
|
82
|
+
7. **Multiple charting libraries**: matplotlib (static), plotly (interactive), bokeh (dashboards)
|
|
83
|
+
8. **Pandas and PySpark support**: Works with both Pandas and PySpark DataFrames for large-scale genomics data
|
|
84
|
+
9. **Convenience data file loaders**: Load and validate common GWAS, eQTL and fine-mapping file formats
|
|
79
85
|
|
|
80
86
|
## Installation
|
|
81
87
|
|
|
@@ -261,6 +267,48 @@ fig = plotter.plot_stacked(
|
|
|
261
267
|
|
|
262
268
|

|
|
263
269
|
|
|
270
|
+
## PheWAS Plots
|
|
271
|
+
|
|
272
|
+
Visualize associations of a single variant across multiple phenotypes:
|
|
273
|
+
|
|
274
|
+
```python
|
|
275
|
+
phewas_df = pd.DataFrame({
|
|
276
|
+
"phenotype": ["Height", "BMI", "T2D", "CAD", "HDL"],
|
|
277
|
+
"p_value": [1e-15, 0.05, 1e-8, 1e-3, 1e-10],
|
|
278
|
+
"category": ["Anthropometric", "Anthropometric", "Metabolic", "Cardiovascular", "Lipids"],
|
|
279
|
+
})
|
|
280
|
+
|
|
281
|
+
fig = plotter.plot_phewas(
|
|
282
|
+
phewas_df,
|
|
283
|
+
variant_id="rs12345",
|
|
284
|
+
category_col="category",
|
|
285
|
+
)
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+

|
|
289
|
+
|
|
290
|
+
## Forest Plots
|
|
291
|
+
|
|
292
|
+
Create forest plots for meta-analysis visualization:
|
|
293
|
+
|
|
294
|
+
```python
|
|
295
|
+
forest_df = pd.DataFrame({
|
|
296
|
+
"study": ["Study A", "Study B", "Study C", "Meta-analysis"],
|
|
297
|
+
"effect": [0.45, 0.52, 0.38, 0.46],
|
|
298
|
+
"ci_lower": [0.30, 0.35, 0.20, 0.40],
|
|
299
|
+
"ci_upper": [0.60, 0.69, 0.56, 0.52],
|
|
300
|
+
"weight": [25, 35, 20, 100],
|
|
301
|
+
})
|
|
302
|
+
|
|
303
|
+
fig = plotter.plot_forest(
|
|
304
|
+
forest_df,
|
|
305
|
+
variant_id="rs12345",
|
|
306
|
+
weight_col="weight",
|
|
307
|
+
)
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+

|
|
311
|
+
|
|
264
312
|
## PySpark Support
|
|
265
313
|
|
|
266
314
|
For large-scale genomics data, pass PySpark DataFrames directly:
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
pylocuszoom/__init__.py,sha256=yb7NMehYOWYPPSBkO4EWwMY4NT-fj8oniNvI3h4oLL0,5219
|
|
2
|
+
pylocuszoom/colors.py,sha256=B28rfhWwGZ-e6Q-F43iXxC6NZpjUo0yWk4S_-vp9ZvU,7686
|
|
3
|
+
pylocuszoom/eqtl.py,sha256=9lZJ8jT1WEj3won6D9B54xdqUvbRvxpOitf97NCUR28,6167
|
|
4
|
+
pylocuszoom/finemapping.py,sha256=PJ4HJYeCaHZecUmADCEGQxKd9HhhjrdIA1H5LQsUmLI,6332
|
|
5
|
+
pylocuszoom/forest.py,sha256=WFX29gEcH-xS5G4kbb9J2WPcbRw7OdMegFuLqN4VfIE,1147
|
|
6
|
+
pylocuszoom/gene_track.py,sha256=VWvPY0SrVFGJprTdttJ72r3JD-r3bdRDr0HDBai0oJw,18692
|
|
7
|
+
pylocuszoom/labels.py,sha256=Ams5WVZFNVT692BRiQ5wZcdbdNEAm5xtgRwmF5u0s_A,3492
|
|
8
|
+
pylocuszoom/ld.py,sha256=64xIulpDVvbMSryWUPoCQ99Odcjwf1wejpwVr_30MLU,6412
|
|
9
|
+
pylocuszoom/loaders.py,sha256=28PqlUhbq1Y6Xzv9NFucWSAqRTqGj8h-pR7wOOmIHxI,25132
|
|
10
|
+
pylocuszoom/logging.py,sha256=nZHEkbnjp8zoyWj_S-Hy9UQvUYLoMoxyiOWRozBT2dg,4987
|
|
11
|
+
pylocuszoom/phewas.py,sha256=jrVDQvUu4rEH3YCE00LX-6STY96vMcK9xZ7AhiN9Jjo,984
|
|
12
|
+
pylocuszoom/plotter.py,sha256=ywqlLMDalzWJaeIfkK_qYh9HRWbypJf9Pgd0II8jAss,53368
|
|
13
|
+
pylocuszoom/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
14
|
+
pylocuszoom/recombination.py,sha256=_KU9zwlhjk0MfyG4_i3rS0JPj5SIWcyTxglVlF-KMP8,13826
|
|
15
|
+
pylocuszoom/schemas.py,sha256=vABBBlAR1vUP6BIewZ8E-TYpacccrcxavrdIDVCrQB4,11916
|
|
16
|
+
pylocuszoom/utils.py,sha256=fKNX9WSTbfHR1EpPYijt6ycNjXEjwzunQMHXAvHaK3s,5211
|
|
17
|
+
pylocuszoom/backends/__init__.py,sha256=7dlGvDoqMVK3fCtoMcI9zOP9qO0odQGPwfXhxnLfXfI,1196
|
|
18
|
+
pylocuszoom/backends/base.py,sha256=ll6pKxVuzMNBDGowOYcPHpFkh4vIRoD_XomXQS8pPOk,11960
|
|
19
|
+
pylocuszoom/backends/bokeh_backend.py,sha256=MQ-UJyGW46Rm6Cj6za9mPn9z8yUVnHibLrAfyNzYp-c,23851
|
|
20
|
+
pylocuszoom/backends/matplotlib_backend.py,sha256=dK3n1KSGSTg4jgnwpa_5A5UvQhbN9hdyEtuDy-uUY1I,13178
|
|
21
|
+
pylocuszoom/backends/plotly_backend.py,sha256=l6H4xabuxZPIGn4bqMb1BGRGylehklvxomun7nL8wIY,29174
|
|
22
|
+
pylocuszoom/reference_data/__init__.py,sha256=qqHqAUt1jebGlCN3CjqW3Z-_coHVNo5K3a3bb9o83hA,109
|
|
23
|
+
pylocuszoom-0.6.0.dist-info/METADATA,sha256=rSgBh890ygYNyPwv6oEBpsIU23BSevMw1Nyfhzv90Bs,16543
|
|
24
|
+
pylocuszoom-0.6.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
25
|
+
pylocuszoom-0.6.0.dist-info/licenses/LICENSE.md,sha256=U2y_hv8RcN5lECA3uK88irU3ODUE1TDAPictcmnP0Q4,698
|
|
26
|
+
pylocuszoom-0.6.0.dist-info/RECORD,,
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
pylocuszoom/__init__.py,sha256=kEfcTSdVSQgP85IdHDqCQ-oEdq_-8n_Rg-xWWtHzKYk,4806
|
|
2
|
-
pylocuszoom/colors.py,sha256=IyzB6x5Q3kkulv-AnYoFVgvibgGgQYE27XjPx99BI5E,6624
|
|
3
|
-
pylocuszoom/eqtl.py,sha256=9lZJ8jT1WEj3won6D9B54xdqUvbRvxpOitf97NCUR28,6167
|
|
4
|
-
pylocuszoom/finemapping.py,sha256=PJ4HJYeCaHZecUmADCEGQxKd9HhhjrdIA1H5LQsUmLI,6332
|
|
5
|
-
pylocuszoom/gene_track.py,sha256=VWvPY0SrVFGJprTdttJ72r3JD-r3bdRDr0HDBai0oJw,18692
|
|
6
|
-
pylocuszoom/labels.py,sha256=Ams5WVZFNVT692BRiQ5wZcdbdNEAm5xtgRwmF5u0s_A,3492
|
|
7
|
-
pylocuszoom/ld.py,sha256=64xIulpDVvbMSryWUPoCQ99Odcjwf1wejpwVr_30MLU,6412
|
|
8
|
-
pylocuszoom/loaders.py,sha256=MK0jUpb09CLMuQYzIY2P1FF3hhtTwemLSiWv4RvLVf8,24350
|
|
9
|
-
pylocuszoom/logging.py,sha256=nZHEkbnjp8zoyWj_S-Hy9UQvUYLoMoxyiOWRozBT2dg,4987
|
|
10
|
-
pylocuszoom/plotter.py,sha256=A7phON4VYrzFZM0CjSlWwMPLYJmjGV1JF1uKHD8Ml2A,44205
|
|
11
|
-
pylocuszoom/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
12
|
-
pylocuszoom/recombination.py,sha256=_W6YVO8a8G8UmGGVda8J_MRI9dOJnffKj8491ILQf3Y,13807
|
|
13
|
-
pylocuszoom/schemas.py,sha256=LRUrtgSYH8CZ7G14VSvSL_Z-p4EQBSv2r5WzyKnROh8,11454
|
|
14
|
-
pylocuszoom/utils.py,sha256=fKNX9WSTbfHR1EpPYijt6ycNjXEjwzunQMHXAvHaK3s,5211
|
|
15
|
-
pylocuszoom/backends/__init__.py,sha256=7dlGvDoqMVK3fCtoMcI9zOP9qO0odQGPwfXhxnLfXfI,1196
|
|
16
|
-
pylocuszoom/backends/base.py,sha256=yLZkr5FRlYHs8L9ViNbTwu8hrBaHoVv_QbMujad2aTc,9793
|
|
17
|
-
pylocuszoom/backends/bokeh_backend.py,sha256=OFx_FISiDFG-A6NXcR8V-2MgkTRq2dXEcpqaWxf0YUg,21528
|
|
18
|
-
pylocuszoom/backends/matplotlib_backend.py,sha256=dUgH3ouQCkh55aufvjNIvkEqMG9oamKKvQYp2AEm4DY,11479
|
|
19
|
-
pylocuszoom/backends/plotly_backend.py,sha256=U3odXYLVCwTC6Xb-NeOs456tlr_qJQxgix7QIjJX-3Q,26922
|
|
20
|
-
pylocuszoom/reference_data/__init__.py,sha256=qqHqAUt1jebGlCN3CjqW3Z-_coHVNo5K3a3bb9o83hA,109
|
|
21
|
-
pylocuszoom-0.5.0.dist-info/METADATA,sha256=_0mgXIY3m1x5ATnQpLfAdRvBjh8iwW_FnX4i-aX4ne8,15228
|
|
22
|
-
pylocuszoom-0.5.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
23
|
-
pylocuszoom-0.5.0.dist-info/licenses/LICENSE.md,sha256=U2y_hv8RcN5lECA3uK88irU3ODUE1TDAPictcmnP0Q4,698
|
|
24
|
-
pylocuszoom-0.5.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|