pylocuszoom 0.2.0__py3-none-any.whl → 0.3.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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pylocuszoom
3
- Version: 0.2.0
3
+ Version: 0.3.0
4
4
  Summary: Regional association plots for GWAS results with LD coloring, gene tracks, and recombination rate overlays
5
5
  Project-URL: Homepage, https://github.com/michael-denyer/pylocuszoom
6
6
  Project-URL: Documentation, https://github.com/michael-denyer/pylocuszoom#readme
@@ -19,6 +19,7 @@ Classifier: Programming Language :: Python :: 3.12
19
19
  Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
20
20
  Classifier: Topic :: Scientific/Engineering :: Visualization
21
21
  Requires-Python: >=3.10
22
+ Requires-Dist: adjusttext>=0.8
22
23
  Requires-Dist: bokeh>=3.8.2
23
24
  Requires-Dist: kaleido>=0.2.0
24
25
  Requires-Dist: loguru>=0.7.0
@@ -28,14 +29,11 @@ Requires-Dist: pandas>=1.4.0
28
29
  Requires-Dist: plotly>=5.0.0
29
30
  Requires-Dist: pyliftover>=0.4
30
31
  Provides-Extra: all
31
- Requires-Dist: adjusttext>=0.8; extra == 'all'
32
32
  Requires-Dist: pyspark>=3.0.0; extra == 'all'
33
33
  Provides-Extra: dev
34
34
  Requires-Dist: pytest-cov>=4.0.0; extra == 'dev'
35
35
  Requires-Dist: pytest>=7.0.0; extra == 'dev'
36
36
  Requires-Dist: ruff>=0.1.0; extra == 'dev'
37
- Provides-Extra: labels
38
- Requires-Dist: adjusttext>=0.8; extra == 'labels'
39
37
  Provides-Extra: spark
40
38
  Requires-Dist: pyspark>=3.0.0; extra == 'spark'
41
39
  Description-Content-Type: text/markdown
@@ -75,14 +73,20 @@ Inspired by [LocusZoom](http://locuszoom.org/) and [locuszoomr](https://github.c
75
73
 
76
74
  ## Installation
77
75
 
76
+ ```bash
77
+ pip install pylocuszoom
78
+ ```
79
+
80
+ Or with uv:
81
+
78
82
  ```bash
79
83
  uv add pylocuszoom
80
84
  ```
81
85
 
82
- Or with pip:
86
+ Or with conda (Bioconda):
83
87
 
84
88
  ```bash
85
- pip install pylocuszoom
89
+ conda install -c bioconda pylocuszoom
86
90
  ```
87
91
 
88
92
  ## Quick Start
@@ -165,20 +169,30 @@ fig = plotter.plot(
165
169
  )
166
170
  ```
167
171
 
168
- ## Interactive Backends (Coming Soon)
172
+ ## Backends
169
173
 
170
- > **Note:** Interactive backends (plotly, bokeh) are planned but not yet fully integrated. Currently all plots use matplotlib.
174
+ pyLocusZoom supports multiple rendering backends:
171
175
 
172
176
  ```python
173
- # Static publication-quality plot (default, currently only supported backend)
174
- plotter = LocusZoomPlotter(species="canine", backend="matplotlib")
175
- fig = plotter.plot(gwas_df, chrom=1, start=1000000, end=2000000)
177
+ # Static publication-quality plot (default)
178
+ fig = plotter.plot(gwas_df, chrom=1, start=1000000, end=2000000, backend="matplotlib")
176
179
  fig.savefig("plot.png", dpi=150)
180
+
181
+ # Interactive Plotly (hover tooltips, pan/zoom)
182
+ fig = plotter.plot(gwas_df, chrom=1, start=1000000, end=2000000, backend="plotly")
183
+ fig.write_html("plot.html")
184
+
185
+ # Interactive Bokeh (dashboard-ready)
186
+ fig = plotter.plot(gwas_df, chrom=1, start=1000000, end=2000000, backend="bokeh")
177
187
  ```
178
188
 
179
- Future releases will support:
180
- - **Plotly**: Interactive plots with hover tooltips, zoom/pan
181
- - **Bokeh**: Dashboard-friendly interactive plots
189
+ | Backend | Output | Best For |
190
+ |---------|--------|----------|
191
+ | `matplotlib` | Static PNG/PDF/SVG | Publications, presentations |
192
+ | `plotly` | Interactive HTML | Web reports, data exploration |
193
+ | `bokeh` | Interactive HTML | Dashboards, web apps |
194
+
195
+ > **Note:** All backends support gene track, recombination overlay, and LD legend. SNP labels (auto-positioned with adjustText) are matplotlib-only.
182
196
 
183
197
  ## Stacked Plots
184
198
 
@@ -0,0 +1,21 @@
1
+ pylocuszoom/__init__.py,sha256=f8h22YYL3JkDP5P_dJftu98qlJkXvaAeyto5kVc8bzU,3785
2
+ pylocuszoom/colors.py,sha256=XXTCmCFfHrOrSiP6b0V8Kis7Z1tyvGEKJpdv59QDVQ8,6610
3
+ pylocuszoom/eqtl.py,sha256=9lZJ8jT1WEj3won6D9B54xdqUvbRvxpOitf97NCUR28,6167
4
+ pylocuszoom/finemapping.py,sha256=PJ4HJYeCaHZecUmADCEGQxKd9HhhjrdIA1H5LQsUmLI,6332
5
+ pylocuszoom/gene_track.py,sha256=CbKqIIl-3VpqIS0NWQ7p-VazhrgbF0-XDkkvoWx_2jI,18665
6
+ pylocuszoom/labels.py,sha256=Ams5WVZFNVT692BRiQ5wZcdbdNEAm5xtgRwmF5u0s_A,3492
7
+ pylocuszoom/ld.py,sha256=64xIulpDVvbMSryWUPoCQ99Odcjwf1wejpwVr_30MLU,6412
8
+ pylocuszoom/logging.py,sha256=nZHEkbnjp8zoyWj_S-Hy9UQvUYLoMoxyiOWRozBT2dg,4987
9
+ pylocuszoom/plotter.py,sha256=7wEN0b3emb0SM7gYn8bSjXBGNt7npw3y3y5AEC-Ha2k,43660
10
+ pylocuszoom/recombination.py,sha256=Q2tAft54nJWHlZt-vZje1r_5RP7D8_VUy5ab_deYXVw,13749
11
+ pylocuszoom/utils.py,sha256=fKNX9WSTbfHR1EpPYijt6ycNjXEjwzunQMHXAvHaK3s,5211
12
+ pylocuszoom/backends/__init__.py,sha256=7dlGvDoqMVK3fCtoMcI9zOP9qO0odQGPwfXhxnLfXfI,1196
13
+ pylocuszoom/backends/base.py,sha256=YEYMtaqPRTJQI-TPqK62-XPN6WvjVwqP6e6ydULK6H0,8523
14
+ pylocuszoom/backends/bokeh_backend.py,sha256=oOXTOhSx-tNgBzgtYfYvGUgNmuUP2vhCbtEBOZ5YZ18,18496
15
+ pylocuszoom/backends/matplotlib_backend.py,sha256=TIKaT7x0X3QKYUB5076XlG6RC0zbi0hcm3LSU7LGnmw,8521
16
+ pylocuszoom/backends/plotly_backend.py,sha256=ucQLmcz6WAdEvII5n3_rdHffZv5-a8FOp8nBGBng-hk,22222
17
+ pylocuszoom/reference_data/__init__.py,sha256=qqHqAUt1jebGlCN3CjqW3Z-_coHVNo5K3a3bb9o83hA,109
18
+ pylocuszoom-0.3.0.dist-info/METADATA,sha256=P-JbXF9KxFzixMAYKQalKO4F4TwOqxDZD0B0uciyy_c,12068
19
+ pylocuszoom-0.3.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
20
+ pylocuszoom-0.3.0.dist-info/licenses/LICENSE.md,sha256=U2y_hv8RcN5lECA3uK88irU3ODUE1TDAPictcmnP0Q4,698
21
+ pylocuszoom-0.3.0.dist-info/RECORD,,
@@ -1,21 +0,0 @@
1
- pylocuszoom/__init__.py,sha256=f8h22YYL3JkDP5P_dJftu98qlJkXvaAeyto5kVc8bzU,3785
2
- pylocuszoom/colors.py,sha256=XXTCmCFfHrOrSiP6b0V8Kis7Z1tyvGEKJpdv59QDVQ8,6610
3
- pylocuszoom/eqtl.py,sha256=9lZJ8jT1WEj3won6D9B54xdqUvbRvxpOitf97NCUR28,6167
4
- pylocuszoom/finemapping.py,sha256=IZEEF13m8xD2qfnTsqcv67BtPAvqC_FrXdGv1VG8BHk,6351
5
- pylocuszoom/gene_track.py,sha256=ZYAWOUHOo9oieovl7VHGCB3j_HBbnr5wwtIwxozgRhE,10854
6
- pylocuszoom/labels.py,sha256=Ams5WVZFNVT692BRiQ5wZcdbdNEAm5xtgRwmF5u0s_A,3492
7
- pylocuszoom/ld.py,sha256=64xIulpDVvbMSryWUPoCQ99Odcjwf1wejpwVr_30MLU,6412
8
- pylocuszoom/logging.py,sha256=nZHEkbnjp8zoyWj_S-Hy9UQvUYLoMoxyiOWRozBT2dg,4987
9
- pylocuszoom/plotter.py,sha256=sPqK74B9-ldcKhrrWixyapIdQ4dVgFRERZfJw4ZNS5Y,37865
10
- pylocuszoom/recombination.py,sha256=Q2tAft54nJWHlZt-vZje1r_5RP7D8_VUy5ab_deYXVw,13749
11
- pylocuszoom/utils.py,sha256=fKNX9WSTbfHR1EpPYijt6ycNjXEjwzunQMHXAvHaK3s,5211
12
- pylocuszoom/backends/__init__.py,sha256=7dlGvDoqMVK3fCtoMcI9zOP9qO0odQGPwfXhxnLfXfI,1196
13
- pylocuszoom/backends/base.py,sha256=4EGT4_88y2jvhWm1zAal9v9yuaHhCLo7-rchcWmIK8c,8451
14
- pylocuszoom/backends/bokeh_backend.py,sha256=V0yQi1lY96hjTjBXGJtLKGy1LFNii58kTAJiqu0LYPg,12900
15
- pylocuszoom/backends/matplotlib_backend.py,sha256=yTTm9KG7e0ct-mvHk_tfJX6SOL97pABsJzs4Xn6H1zw,8010
16
- pylocuszoom/backends/plotly_backend.py,sha256=2EDJZczqjZ5gItd3Fb4UaRYGj7SQy7Wgg5UIL8LJ9LM,14128
17
- pylocuszoom/reference_data/__init__.py,sha256=qqHqAUt1jebGlCN3CjqW3Z-_coHVNo5K3a3bb9o83hA,109
18
- pylocuszoom-0.2.0.dist-info/METADATA,sha256=tDPRbhg4r1NavMCH1e_VTzKY9qApsY97yyiEYh04S78,11723
19
- pylocuszoom-0.2.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
20
- pylocuszoom-0.2.0.dist-info/licenses/LICENSE.md,sha256=U2y_hv8RcN5lECA3uK88irU3ODUE1TDAPictcmnP0Q4,698
21
- pylocuszoom-0.2.0.dist-info/RECORD,,