Skip to content

Commit

Permalink
bug fix
Browse files Browse the repository at this point in the history
  • Loading branch information
ponnhide committed May 20, 2023
1 parent 04fd12d commit 90858a5
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 26 deletions.
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ If you want to use developmental version, it can be installed using the followin
`pip install git+https://github.com/ponnhide/patchworklib.git`

## News
- Developmental verion on GitHub practically supports plotnine version 0.12.1.
- Modified `align_xlabels` and `align_ylabels` functions so that they support to align labels on subplots.

#### 05162023: version 0.6.1 is released.
- I could not fully support plotnine version 0.12.1 (It works, but patchworklib arrangement results are not as expected). I will do not support plotnine in the future.
- Bricks object gained the new methods `align_xlabels` and `align_ylabels`, which help users align x/y labels of the given Brick object.
Expand Down
74 changes: 48 additions & 26 deletions patchworklib/patchworklib.py
Original file line number Diff line number Diff line change
Expand Up @@ -1893,49 +1893,71 @@ def change_plotsize(self, new_size):

def align_xlabels(self, keys=None):
global _basefigure
global _axes_dict
renderer = _basefigure.canvas.get_renderer()

if keys is None:
keys = self.bricks_dict.keys()
keys = [key for key in self._labels if key[0:5] != "case:" and key[0:8] != "outline:"]
else:
pass

pass
targets = [key if type(key) in (Bricks, Brick, cBrick) else _axes_dict[key] for key in keys]

miny = None
for key in keys:
x, y = self[key].xaxis.get_label().get_position()
text = self[key].xaxis.get_label().get_text()
for target in targets:
if type(target) == Bricks:
x, y = target._case.xaxis.get_label().get_position()
text = target._case.xaxis.get_label().get_text()
else:
x, y = target.xaxis.get_label().get_position()
text = target.xaxis.get_label().get_text()
if miny is None or y < miny:
miny = y

for key in keys:
pad = self[key].xaxis.labelpad
x, y = self[key].xaxis.get_label().get_position()
text = self[key].xaxis.get_label().get_text()
self[key].set_xlabel(text, x=x, y=y, labelpad=pad + (y-miny)*(72 / _basefigure.dpi))
for target in targets:
if type(target) != Bricks:
pad = target.xaxis.labelpad
x, y = target.xaxis.get_label().get_position()
text = target.xaxis.get_label().get_text()
target.set_xlabel(text, x=x, y=y, labelpad=pad + (y-miny)*(72 / _basefigure.dpi))
else:
pad = target._case.xaxis.labelpad
x, y = target._case.xaxis.get_label().get_position()
text = target._case.xaxis.get_label().get_text()
target._case.set_xlabel(text, x=x, y=y, labelpad=pad + (y-miny)*(72 / _basefigure.dpi))

def align_ylabels(self, keys=None, ha="left"):
global _basefigure
global _axes_dict
renderer = _basefigure.canvas.get_renderer()

if keys is None:
keys = self.bricks_dict.keys()
keys = [key for key in self._labels if key[0:5] != "case:" and key[0:8] != "outline:"]
else:
pass

pass
targets = [key if type(key) in (Bricks, Brick, cBrick) else _axes_dict[key] for key in keys]

minx = None
for key in keys:
x, y = self[key].yaxis.get_label().get_position()
text = self[key].yaxis.get_label().get_text()
#coordinate = self[key].transAxes.inverted()
#bbox_text = self[key].yaxis.get_label().get_window_extent(renderer=renderer)
#bbox_text = Bbox(coordinate.transform(bbox_text))
#x = x + bbox_text.width
for target in targets:
if type(target) == Bricks:
x, y = target._case.yaxis.get_label().get_position()
text = target._case.yaxis.get_label().get_text()
else:
x, y = target.yaxis.get_label().get_position()
text = target.yaxis.get_label().get_text()
if minx is None or x < minx:
minx = x

for key in keys:
pad = self[key].yaxis.labelpad
x, y = self[key].yaxis.get_label().get_position()
text = self[key].yaxis.get_label().get_text()
self[key].set_ylabel(text, x=x, y=y, labelpad=pad + (x-minx)*(72 / _basefigure.dpi))
for target in targets:
if type(target) != Bricks:
pad = target.yaxis.labelpad
x, y = target.yaxis.get_label().get_position()
text = target.yaxis.get_label().get_text()
target.set_ylabel(text, x=x, y=y, labelpad=pad + (x-minx)*(72 / _basefigure.dpi))
else:
pad = target._case.yaxis.labelpad
x, y = target._case.yaxis.get_label().get_position()
text = target._case.yaxis.get_label().get_text()
target._case.set_ylabel(text, x=x, y=y, labelpad=pad + (x-minx)*(72 / _basefigure.dpi))

def set_supxlabel(self, xlabel, labelpad=None, *, loc=None, **args):
"""
Expand Down

0 comments on commit 90858a5

Please sign in to comment.