Source code for fireant.widgets.matplotlib
import itertools
from fireant import utils
from fireant.reference_helpers import (
reference_alias,
reference_label,
)
from .base import TransformableWidget
from .chart_base import ChartWidget
MAP_SERIES_TO_PLOT_FUNC = {
ChartWidget.LineSeries: 'line',
ChartWidget.AreaSeries: 'area',
ChartWidget.AreaStackedSeries: 'area',
ChartWidget.AreaPercentageSeries: 'area',
ChartWidget.PieSeries: 'pie',
ChartWidget.BarSeries: 'bar',
ChartWidget.StackedBarSeries: 'bar',
ChartWidget.ColumnSeries: 'bar',
ChartWidget.StackedColumnSeries: 'bar',
}
[docs]class Matplotlib(ChartWidget, TransformableWidget):
def __init__(self, title=None):
super(Matplotlib, self).__init__()
self.title = title
[docs] def transform(self, data_frame, slicer, dimensions, references):
import matplotlib.pyplot as plt
data_frame = data_frame.copy()
n_axes = len(self.items)
figsize = (14, 5 * n_axes)
fig, plt_axes = plt.subplots(n_axes,
sharex='row',
figsize=figsize)
fig.suptitle(self.title)
if not hasattr(plt_axes, '__iter__'):
plt_axes = (plt_axes,)
colors = itertools.cycle('bgrcmyk')
for axis, plt_axis in zip(self.items, plt_axes):
for series in axis:
series_color = next(colors)
linestyles = itertools.cycle(['-', '--', '-.', ':'])
for reference in [None] + references:
metric = series.metric
f_metric_key = utils.alias_selector(reference_alias(metric, reference))
f_metric_label = reference_label(metric, reference)
plot = self.get_plot_func_for_series_type(data_frame[f_metric_key], f_metric_label, series)
plot(ax=plt_axis,
label=axis.label,
color=series_color,
stacked=series.stacking is not None,
linestyle=next(linestyles)) \
.legend(loc='center left',
bbox_to_anchor=(1, 0.5))
return plt_axes
[docs] @staticmethod
def get_plot_func_for_series_type(pd_series, label, chart_series):
pd_series.name = label
plot = pd_series.plot
plot_func_name = MAP_SERIES_TO_PLOT_FUNC[type(chart_series)]
plot_func = getattr(plot, plot_func_name)
return plot_func