Skip to content

Commit 90858a5

Browse files
committed
bug fix
1 parent 04fd12d commit 90858a5

File tree

2 files changed

+51
-26
lines changed

2 files changed

+51
-26
lines changed

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ If you want to use developmental version, it can be installed using the followin
1313
`pip install git+https://github.com/ponnhide/patchworklib.git`
1414

1515
## News
16+
- Developmental verion on GitHub practically supports plotnine version 0.12.1.
17+
- Modified `align_xlabels` and `align_ylabels` functions so that they support to align labels on subplots.
18+
1619
#### 05162023: version 0.6.1 is released.
1720
- 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.
1821
- Bricks object gained the new methods `align_xlabels` and `align_ylabels`, which help users align x/y labels of the given Brick object.

patchworklib/patchworklib.py

Lines changed: 48 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1893,49 +1893,71 @@ def change_plotsize(self, new_size):
18931893

18941894
def align_xlabels(self, keys=None):
18951895
global _basefigure
1896+
global _axes_dict
18961897
renderer = _basefigure.canvas.get_renderer()
1898+
18971899
if keys is None:
1898-
keys = self.bricks_dict.keys()
1900+
keys = [key for key in self._labels if key[0:5] != "case:" and key[0:8] != "outline:"]
18991901
else:
1900-
pass
1901-
1902+
pass
1903+
targets = [key if type(key) in (Bricks, Brick, cBrick) else _axes_dict[key] for key in keys]
1904+
19021905
miny = None
1903-
for key in keys:
1904-
x, y = self[key].xaxis.get_label().get_position()
1905-
text = self[key].xaxis.get_label().get_text()
1906+
for target in targets:
1907+
if type(target) == Bricks:
1908+
x, y = target._case.xaxis.get_label().get_position()
1909+
text = target._case.xaxis.get_label().get_text()
1910+
else:
1911+
x, y = target.xaxis.get_label().get_position()
1912+
text = target.xaxis.get_label().get_text()
19061913
if miny is None or y < miny:
19071914
miny = y
19081915

1909-
for key in keys:
1910-
pad = self[key].xaxis.labelpad
1911-
x, y = self[key].xaxis.get_label().get_position()
1912-
text = self[key].xaxis.get_label().get_text()
1913-
self[key].set_xlabel(text, x=x, y=y, labelpad=pad + (y-miny)*(72 / _basefigure.dpi))
1916+
for target in targets:
1917+
if type(target) != Bricks:
1918+
pad = target.xaxis.labelpad
1919+
x, y = target.xaxis.get_label().get_position()
1920+
text = target.xaxis.get_label().get_text()
1921+
target.set_xlabel(text, x=x, y=y, labelpad=pad + (y-miny)*(72 / _basefigure.dpi))
1922+
else:
1923+
pad = target._case.xaxis.labelpad
1924+
x, y = target._case.xaxis.get_label().get_position()
1925+
text = target._case.xaxis.get_label().get_text()
1926+
target._case.set_xlabel(text, x=x, y=y, labelpad=pad + (y-miny)*(72 / _basefigure.dpi))
19141927

19151928
def align_ylabels(self, keys=None, ha="left"):
19161929
global _basefigure
1930+
global _axes_dict
19171931
renderer = _basefigure.canvas.get_renderer()
1932+
19181933
if keys is None:
1919-
keys = self.bricks_dict.keys()
1934+
keys = [key for key in self._labels if key[0:5] != "case:" and key[0:8] != "outline:"]
19201935
else:
1921-
pass
1922-
1936+
pass
1937+
targets = [key if type(key) in (Bricks, Brick, cBrick) else _axes_dict[key] for key in keys]
1938+
19231939
minx = None
1924-
for key in keys:
1925-
x, y = self[key].yaxis.get_label().get_position()
1926-
text = self[key].yaxis.get_label().get_text()
1927-
#coordinate = self[key].transAxes.inverted()
1928-
#bbox_text = self[key].yaxis.get_label().get_window_extent(renderer=renderer)
1929-
#bbox_text = Bbox(coordinate.transform(bbox_text))
1930-
#x = x + bbox_text.width
1940+
for target in targets:
1941+
if type(target) == Bricks:
1942+
x, y = target._case.yaxis.get_label().get_position()
1943+
text = target._case.yaxis.get_label().get_text()
1944+
else:
1945+
x, y = target.yaxis.get_label().get_position()
1946+
text = target.yaxis.get_label().get_text()
19311947
if minx is None or x < minx:
19321948
minx = x
19331949

1934-
for key in keys:
1935-
pad = self[key].yaxis.labelpad
1936-
x, y = self[key].yaxis.get_label().get_position()
1937-
text = self[key].yaxis.get_label().get_text()
1938-
self[key].set_ylabel(text, x=x, y=y, labelpad=pad + (x-minx)*(72 / _basefigure.dpi))
1950+
for target in targets:
1951+
if type(target) != Bricks:
1952+
pad = target.yaxis.labelpad
1953+
x, y = target.yaxis.get_label().get_position()
1954+
text = target.yaxis.get_label().get_text()
1955+
target.set_ylabel(text, x=x, y=y, labelpad=pad + (x-minx)*(72 / _basefigure.dpi))
1956+
else:
1957+
pad = target._case.yaxis.labelpad
1958+
x, y = target._case.yaxis.get_label().get_position()
1959+
text = target._case.yaxis.get_label().get_text()
1960+
target._case.set_ylabel(text, x=x, y=y, labelpad=pad + (x-minx)*(72 / _basefigure.dpi))
19391961

19401962
def set_supxlabel(self, xlabel, labelpad=None, *, loc=None, **args):
19411963
"""

0 commit comments

Comments
 (0)