From 2405d2bf68f045df4cc7953ab3d4cbfc4b28573a Mon Sep 17 00:00:00 2001 From: e-sollier Date: Thu, 10 Oct 2024 10:49:16 +0200 Subject: [PATCH] Add option for custom chr_prefix --- docs/content/describe_figure.rst | 1 + figeno/cli/cli.py | 2 +- figeno/gui/package-lock.json | 4 ++-- figeno/gui/package.json | 2 +- figeno/gui/src/Track.jsx | 4 ++++ figeno/gui/src/TracksContainer.jsx | 3 ++- figeno/track_chr.py | 15 ++++++++------- pyproject.toml | 2 +- 8 files changed, 20 insertions(+), 13 deletions(-) diff --git a/docs/content/describe_figure.rst b/docs/content/describe_figure.rst index ba893b1..4a4b44a 100644 --- a/docs/content/describe_figure.rst +++ b/docs/content/describe_figure.rst @@ -93,6 +93,7 @@ Parameters: * ``ticks_angle``: Angle in degrees at which the ticks are written. The default (0) results in horizontal ticks, but you can also tilt them by increasing this value to e.g. 30. Rotating the ticks might result in them overlapping with the chromosome name, so you might want to post-process the figure in a vector graphics editor by manualling moving the chromosome name in case of overlap. +* ``chr_prefix``: Prefix to add before the chromosome names (default: "chr"). genes ^^^^^ diff --git a/figeno/cli/cli.py b/figeno/cli/cli.py index ba626d7..35d069b 100644 --- a/figeno/cli/cli.py +++ b/figeno/cli/cli.py @@ -2,7 +2,7 @@ from figeno.cli import gui, init,make -__version__ = "1.4.7" +__version__ = "1.5.0" def main(): parser = ArgumentParser("figeno",formatter_class=ArgumentDefaultsHelpFormatter) diff --git a/figeno/gui/package-lock.json b/figeno/gui/package-lock.json index f68983d..c3528fb 100644 --- a/figeno/gui/package-lock.json +++ b/figeno/gui/package-lock.json @@ -1,12 +1,12 @@ { "name": "figeno", - "version": "0.1.0", + "version": "1.4.7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "figeno", - "version": "0.1.0", + "version": "1.4.7", "dependencies": { "@dnd-kit/core": "^6.1.0", "@dnd-kit/sortable": "^8.0.0", diff --git a/figeno/gui/package.json b/figeno/gui/package.json index 9359ebc..da27dbe 100644 --- a/figeno/gui/package.json +++ b/figeno/gui/package.json @@ -1,6 +1,6 @@ { "name": "figeno", - "version": "1.4.7", + "version": "1.5.0", "private": true, "homepage": "./", "dependencies": { diff --git a/figeno/gui/src/Track.jsx b/figeno/gui/src/Track.jsx index 1cb7a74..536d6fb 100644 --- a/figeno/gui/src/Track.jsx +++ b/figeno/gui/src/Track.jsx @@ -148,6 +148,10 @@ function ChrTrack({track,set_value}){
set_value("ticks_angle",e.target.value)} > +
+
+ + set_value("chr_prefix",e.target.value)} >
):""} diff --git a/figeno/gui/src/TracksContainer.jsx b/figeno/gui/src/TracksContainer.jsx index ffc8cab..a5b1e8c 100644 --- a/figeno/gui/src/TracksContainer.jsx +++ b/figeno/gui/src/TracksContainer.jsx @@ -18,7 +18,8 @@ export const defaultTrackValues={ ticklabels_pos:"below", unit:"kb", ticks_interval:"auto", - ticks_angle:0 + ticks_angle:0, + chr_prefix: "chr" }, "genes":{ height:"10", diff --git a/figeno/track_chr.py b/figeno/track_chr.py index ede355a..5da1445 100644 --- a/figeno/track_chr.py +++ b/figeno/track_chr.py @@ -9,7 +9,7 @@ from figeno.utils import KnownException, split_box, draw_bounding_box , interpolate_polar_vertices, compute_rotation_text, polar2cartesian, cartesian2polar class chr_track: - def __init__(self,style="default",unit="kb",ticklabels_pos="below",ticks_interval="auto",ticks_angle=0,lw_scale=1.0,no_margin=False,reference="custom",cytobands_file="", + def __init__(self,style="default",unit="kb",ticklabels_pos="below",ticks_interval="auto",ticks_angle=0,lw_scale=1.0,chr_prefix="chr",no_margin=False,reference="custom",cytobands_file="", fontscale=1,bounding_box=False,height=12,margin_above=1.5,label="",label_rotate=False,**kwargs): self.style=style self.unit=unit @@ -19,6 +19,7 @@ def __init__(self,style="default",unit="kb",ticklabels_pos="below",ticks_interva self.lw_scale= float(lw_scale) while self.ticks_angle<-180: self.ticks_angle+=360 while self.ticks_angle>180: self.ticks_angle-=360 + self.chr_prefix=chr_prefix self.no_margin=no_margin self.reference=reference self.fontscale=float(fontscale) @@ -149,9 +150,9 @@ def draw_region(self,region,box,single_region=False): # Chr label if self.ticklabels_pos!="none": if self.ticklabels_pos=="below" and (not "upside_down" in box): - box["ax"].text((box["left"]+box["right"])/2,box["bottom"],"chr"+region.chr,horizontalalignment="center",verticalalignment="bottom",fontsize=9*self.fontscale) + box["ax"].text((box["left"]+box["right"])/2,box["bottom"],self.chr_prefix+region.chr,horizontalalignment="center",verticalalignment="bottom",fontsize=9*self.fontscale) else: - box["ax"].text((box["left"]+box["right"])/2,box["top"],"chr"+region.chr,horizontalalignment="center",verticalalignment="top",fontsize=9*self.fontscale) + box["ax"].text((box["left"]+box["right"])/2,box["top"],self.chr_prefix+region.chr,horizontalalignment="center",verticalalignment="top",fontsize=9*self.fontscale) def draw_region_arrow(self,region,box): arrow_height = (box["top"]-box['bottom']) * 0.5 *self.lw_scale @@ -193,10 +194,10 @@ def draw_region_arrow(self,region,box): fontsize=8*self.fontscale) if self.ticklabels_pos=="below" and (not "upside_down" in box): - box["ax"].text((box["right"]+box["left"])/2,box["top"]-arrow_height*1.55,"chr"+region.chr.lstrip("chr"),horizontalalignment="center",verticalalignment="top", + box["ax"].text((box["right"]+box["left"])/2,box["top"]-arrow_height*1.55,self.chr_prefix+region.chr.lstrip("chr"),horizontalalignment="center",verticalalignment="top", fontsize=10*self.fontscale) else: - box["ax"].text((box["right"]+box["left"])/2,box["bottom"]+arrow_height*1.55,"chr"+region.chr.lstrip("chr"),horizontalalignment="center",verticalalignment="bottom", + box["ax"].text((box["right"]+box["left"])/2,box["bottom"]+arrow_height*1.55,self.chr_prefix+region.chr.lstrip("chr"),horizontalalignment="center",verticalalignment="bottom", fontsize=10*self.fontscale) def draw_region_ideogram(self,region,box): @@ -204,12 +205,12 @@ def draw_region_ideogram(self,region,box): if self.ticklabels_pos=="below" and (not "upside_down" in box): y = box["bottom"] + (box["top"]-box["bottom"]) * 0.75 if self.fontscale>0: - box["ax"].text((box["left"]+box["right"])/2, box["top"]-height-1, "chr"+region.chr, + box["ax"].text((box["left"]+box["right"])/2, box["top"]-height-1, self.chr_prefix+region.chr, horizontalalignment="center", verticalalignment="top",fontsize=10*self.fontscale) elif self.ticklabels_pos=="above": y = box["bottom"] + (box["top"]-box["bottom"]) * 0.25 if self.fontscale>0: - box["ax"].text((box["left"]+box["right"])/2, box["bottom"] + height+1, "chr"+region.chr, + box["ax"].text((box["left"]+box["right"])/2, box["bottom"] + height+1, self.chr_prefix+region.chr, horizontalalignment="center", verticalalignment="bottom",fontsize=10*self.fontscale) else: y= (box["bottom"]+box["top"]) / 2 diff --git a/pyproject.toml b/pyproject.toml index 4f5f6ff..6eeb3ee 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,7 +9,7 @@ packages = ["figeno", "figeno.data", "figeno.cli", "figeno.gui"] [project] name = 'figeno' -version = "1.4.7" +version = "1.5.0" description = 'Package for generating genomics figures.' readme = 'README.md' authors = [