Beispiel #1
0
def get_plot_formatting(ax: Axes, series: MediaResource, index_attribute: str,
                        by: str, scheme: str) -> Axes:
    """ Formats the plot aesthetics
		Parameters
		----------
		ax: matplotlib.axes._subplots.AxesSubplot
			The plot to format
		Returns
		----------
		ax : matplotlib.axes._subplots.AxesSubplot
	"""
    color_scheme_label = scheme if scheme in colorschemes else 'graphtv'
    color_scheme = colorschemes.get(color_scheme_label)
    background_color = color_scheme.background
    tick_color = color_scheme.ticks
    font_color = color_scheme.font

    ax.patch.set_facecolor(background_color)
    ax.spines['bottom'].set_color(background_color)
    ax.spines['top'].set_color(background_color)
    ax.spines['left'].set_color(background_color)
    ax.spines['right'].set_color(background_color)

    # change the label colors
    [i.set_color(tick_color) for i in plt.gca().get_yticklabels()]
    [i.set_color(tick_color) for i in plt.gca().get_xticklabels()]

    # Change tick size
    ax.tick_params(axis='y', which='major', labelsize=22)
    ax.tick_params(axis='y', which='minor', labelsize=22)
    ax.yaxis.grid(True)
    ax.xaxis.grid(False)

    # Add series parameters
    episode_indicies = [
        float(episode[index_attribute]) for season in series.seasons
        for episode in season
    ]

    # Set plot bounds

    x_min = min(episode_indicies)
    x_max = max(episode_indicies)

    if by == 'index':
        x_max += 1
    else:
        x_min -= 1 / 12
        x_max += 1 / 12

    ax.set_xlim((x_min, x_max))
    ax.set_ylim(ymax=10)

    plt.xlabel(index_attribute, fontsize=16, color=font_color)
    plt.ylabel('imdbRating', fontsize=16, color=font_color)
    plt.title(series.title, fontsize=24, color=font_color)

    return ax
Beispiel #2
0
def _draw_subplot(subplot: Subplot, ax: Axes, start: datetime.datetime,
                  end: datetime.datetime):

    data_series = [line.load(start, end) for line in subplot.lines]
    for line, data in zip(subplot.lines, data_series):
        _draw_series(data, ax, line)

    if subplot.ylim:
        if np.isfinite(subplot.ylim[0]):
            ax.set_ylim(bottom=subplot.ylim[0])
        if np.isfinite(subplot.ylim[1]):
            ax.set_ylim(top=subplot.ylim[1])

    ax.set_ylabel(subplot.ylabel, fontsize=subplot.plot.fontsize(1.2))

    # Show log book entries for the logsite of this subplot
    # Draw only logs if logsite is a site of the subplot's lines
    if subplot.logsite in [l.siteid for l in subplot.lines]:
        # Traverse logs and draw them
        for logtime, logtype, logtext in subplot.get_logs():
            x = np.datetime64(logtime)
            ax.axvline(x, linestyle='-', color='r', alpha=0.5, linewidth=3)
            ax.text(x,
                    ax.get_ylim()[0],
                    logtype,
                    ha='left',
                    va='bottom',
                    fontsize=subplot.plot.fontsize(0.9))

    ax.set_xlim(subplot.plot.start, subplot.plot.end)

    for xtl in ax.get_xticklabels():
        xtl.set_rotation(15)
    ax.yaxis.set_major_locator(MaxNLocator(prune='upper'))
    ax.tick_params(axis='both',
                   which='major',
                   labelsize=subplot.plot.fontsize(1.1))

    ax.grid()
    ax.legend(loc=0, prop=dict(size=subplot.plot.fontsize(1)))