Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
89 changes: 49 additions & 40 deletions mplexporter/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,29 @@ def get_text_style(text):
return style


def _tick_format_props(formatter, tickvalues, labels):
if isinstance(formatter, ticker.NullFormatter):
return "", ""
if isinstance(formatter, ticker.StrMethodFormatter):
convertor = StrMethodTickFormatterConvertor(formatter)
return convertor.output, "str_method"
if isinstance(formatter, ticker.PercentFormatter):
return {
"xmax": formatter.xmax,
"decimals": formatter.decimals,
"symbol": formatter.symbol,
}, "percent"
if hasattr(ticker, 'IndexFormatter') and isinstance(formatter, ticker.IndexFormatter):
return [text.get_text() for text in labels], "index"
if isinstance(formatter, ticker.FixedFormatter):
return list(formatter.seq), "fixed"
if isinstance(formatter, ticker.FuncFormatter) and tickvalues:
return [formatter(value) for value in tickvalues], "func"
if not any(label.get_visible() for label in labels):
return "", ""
return None, ""


def get_axis_properties(axis):
"""Return the property dictionary for a matplotlib.Axis instance"""
props = {}
Expand All @@ -212,36 +235,16 @@ def get_axis_properties(axis):
else:
props['tickvalues'] = None

minor_locator = axis.get_minor_locator()
props['minor_tickvalues'] = list(axis.get_minorticklocs()) if minor_locator else None
props['minorticklength'] = axis._minor_tick_kw.get('size', None)
props['majorticklength'] = axis._major_tick_kw.get('size', None)

# Find tick formats
props['tickformat_formatter'] = ""
formatter = axis.get_major_formatter()
if isinstance(formatter, ticker.NullFormatter):
props['tickformat'] = ""
elif isinstance(formatter, ticker.StrMethodFormatter):
convertor = StrMethodTickFormatterConvertor(formatter)
props['tickformat'] = convertor.output
props['tickformat_formatter'] = "str_method"
elif isinstance(formatter, ticker.PercentFormatter):
props['tickformat'] = {
"xmax": formatter.xmax,
"decimals": formatter.decimals,
"symbol": formatter.symbol,
}
props['tickformat_formatter'] = "percent"
elif hasattr(ticker, 'IndexFormatter') and isinstance(formatter, ticker.IndexFormatter):
# IndexFormatter was dropped in matplotlib 3.5
props['tickformat'] = [text.get_text() for text in axis.get_ticklabels()]
props['tickformat_formatter'] = "index"
elif isinstance(formatter, ticker.FixedFormatter):
props['tickformat'] = list(formatter.seq)
props['tickformat_formatter'] = "fixed"
elif isinstance(formatter, ticker.FuncFormatter) and props['tickvalues']:
props['tickformat'] = [formatter(value) for value in props['tickvalues']]
props['tickformat_formatter'] = "func"
elif not any(label.get_visible() for label in axis.get_ticklabels()):
props['tickformat'] = ""
else:
props['tickformat'] = None
props['minor_tickformat'], props['minor_tickformat_formatter'] = _tick_format_props(
axis.get_minor_formatter(), props['minor_tickvalues'], axis.get_minorticklabels())
props['tickformat'], props['tickformat_formatter'] = _tick_format_props(
axis.get_major_formatter(), props['tickvalues'], axis.get_ticklabels())

# Get axis scale
props['scale'] = axis.get_scale()
Expand All @@ -255,26 +258,32 @@ def get_axis_properties(axis):

# Get associated grid
props['grid'] = get_grid_style(axis)
props['minor_grid'] = get_grid_style(axis, which='minor')

# get axis visibility
props['visible'] = axis.get_visible()

return props


def get_grid_style(axis):
gridlines = axis.get_gridlines()
if axis._major_tick_kw['gridOn'] and len(gridlines) > 0:
color = export_color(gridlines[0].get_color())
alpha = gridlines[0].get_alpha()
dasharray = get_dasharray(gridlines[0])
return dict(gridOn=True,
color=color,
dasharray=dasharray,
alpha=alpha)
else:
def get_grid_style(axis, which='major'):
tick_kw = axis._minor_tick_kw if which == 'minor' else axis._major_tick_kw

if not tick_kw.get('gridOn'):
return {"gridOn": False}

rc = matplotlib.rcParams
color = export_color(tick_kw.get('grid_color', tick_kw.get('grid_c', rc['grid.color'])))
alpha = tick_kw.get('grid_alpha', rc['grid.alpha'])
dasharray = _dasharray_from_linestyle(tick_kw.get('grid_linestyle', tick_kw.get('grid_ls', rc['grid.linestyle'])))
linewidth = tick_kw.get('grid_linewidth', tick_kw.get('grid_lw', rc['grid.linewidth']))

return dict(gridOn=True,
color=color,
dasharray=dasharray,
linewidth=linewidth,
alpha=alpha)


def get_figure_properties(fig):
return {'figwidth': fig.get_figwidth(),
Expand Down