mirror of
https://github.com/wassname/baukit.git
synced 2026-06-27 17:14:53 +08:00
Give control over bbox_inches and rendering format.
This commit is contained in:
+7
-4
@@ -993,13 +993,16 @@ class Image(Widget):
|
||||
"""Clears the image."""
|
||||
self.src = ''
|
||||
|
||||
def render(self, obj):
|
||||
def render(self, obj, **kwargs):
|
||||
buf = io.BytesIO()
|
||||
if 'format' not in kwargs:
|
||||
kwargs['format'] = 'png'
|
||||
image_format = kwargs['format']
|
||||
if hasattr(obj, 'save'): # Like a PIL.Image.Image
|
||||
obj.save(buf, format='png')
|
||||
obj.save(buf, **kwargs)
|
||||
elif hasattr(obj, 'savefig'): # Like a matplotlib.figure.Figure
|
||||
obj.savefig(buf, format='png', bbox_inches='tight')
|
||||
self.src= 'data:image/png;base64,' + (
|
||||
obj.savefig(buf, **kwargs)
|
||||
self.src= f'data:image/{image_format};base64,' + (
|
||||
base64.b64encode(buf.getvalue()).decode('utf-8'))
|
||||
buf.close()
|
||||
|
||||
|
||||
@@ -27,6 +27,7 @@ class PlotWidget(Image):
|
||||
def __init__(self, redraw_rule, rc=None, **kwargs):
|
||||
super().__init__()
|
||||
init_args = dict(kwargs)
|
||||
render_args = dict()
|
||||
self.rc = {} if rc is None else rc
|
||||
|
||||
all_names = []
|
||||
@@ -34,7 +35,7 @@ class PlotWidget(Image):
|
||||
if i == 0:
|
||||
assert p.default == inspect._empty, 'First arg of redraw rule should be the figure'
|
||||
else:
|
||||
if name in kwargs:
|
||||
if name in init_args:
|
||||
default = init_args.pop(name)
|
||||
else:
|
||||
assert p.default != inspect._empty, 'Arguments must have default values'
|
||||
@@ -42,6 +43,11 @@ class PlotWidget(Image):
|
||||
setattr(self, name, Property(default))
|
||||
all_names.append(name)
|
||||
|
||||
for name in ['format', 'metadata', 'bbox_inches', 'pad_inches',
|
||||
'facecolor', 'edgecolor', 'backend']:
|
||||
if name in init_args:
|
||||
render_args[name] = init_args.pop(name)
|
||||
|
||||
with matplotlib.pyplot.rc_context(rc=self.rc):
|
||||
old_backend = matplotlib.pyplot.get_backend()
|
||||
matplotlib.pyplot.switch_backend('agg')
|
||||
@@ -57,6 +63,6 @@ class PlotWidget(Image):
|
||||
for name in all_names:
|
||||
args.append(getattr(self, name))
|
||||
redraw_rule(*args)
|
||||
self.render(self.fig)
|
||||
self.render(self.fig, **render_args)
|
||||
self.on(' '.join(all_names), invoke_redraw)
|
||||
invoke_redraw()
|
||||
|
||||
Reference in New Issue
Block a user