Source code for bw2analyzer.matrix_grapher

import matplotlib.pyplot as plt
import numpy as np
from scipy.sparse.csgraph import reverse_cuthill_mckee


[docs] class SparseMatrixGrapher: def __init__(self, matrix):
[docs] self.matrix = matrix
[docs] def graph( self, filename=None, marker_string="c.", mew=0.5, ms=1, alpha=0.8, width=None, height=None, dpi=300, ): tm = self.matrix.tocoo() y, x = self.matrix.shape plt.figure(figsize=(width or x / 1000, height or y / 1000)) ax = plt.axes([0, 0, 1, 1]) # Start from top left corner, not bottom left corner ax.xaxis.set_ticks_position("none") ax.yaxis.set_ticks_position("none") ax.xaxis.set_ticklabels([]) ax.yaxis.set_ticklabels([]) ax.plot( tm.shape[1] - tm.col, tm.row, marker_string, mew=mew, ms=ms, alpha=alpha ) ax.set_ylim((0, tm.shape[0])) ax.set_xlim((0, tm.shape[1])) plt.box(False) if filename: plt.savefig(filename, dpi=dpi)
[docs] def magnitude_graph(self, filename=None, dpi=600, width=None, height=None): def get_relative_scores(data): return np.abs(data) / np.max(np.abs(data)) def get_colors(distances): cmap = plt.get_cmap("Dark2") return cmap(distances) def unroll(data): return [list(row) for row in data] nm = reverse_cuthill_mckee(self.matrix) ro = self.matrix[nm, :][:, nm] as_coo = ro.tocoo() y, x = as_coo.shape colors = unroll(get_colors(get_relative_scores(as_coo.data))) plt.figure(figsize=(width or x / 1000, height or y / 1000)) ax = plt.axes([0, 0, 1, 1]) plt.scatter( list(as_coo.shape[1] - as_coo.col), list(as_coo.row), s=10, c=colors, marker=".", edgecolors="None", ) ax.xaxis.set_ticks_position("none") ax.yaxis.set_ticks_position("none") ax.xaxis.set_ticklabels([]) ax.yaxis.set_ticklabels([]) ax.set_ylim((0, self.matrix.shape[0])) ax.set_xlim((0, self.matrix.shape[1])) plt.box(False) if filename: plt.savefig(filename, dpi=dpi)
[docs] def ordered_graph(self, filename=None, dpi=600, width=None, height=None): def get_distances(xs, ys): z = np.abs(xs - ys) / 2 return np.sqrt(2 * z ** 2) / MAX_DIST def get_colors(distances): cmap = plt.get_cmap("Dark2") return cmap(distances) def unroll(data): return [list(row) for row in data] nm = reverse_cuthill_mckee(self.matrix) ro = self.matrix[nm, :][:, nm] as_coo = ro.tocoo() y, x = as_coo.shape MAX_DIST = np.sqrt(2 * (x / 2.0) ** 2) colors = unroll(get_colors(get_distances(as_coo.col, as_coo.row))) plt.figure(figsize=(width or x / 1000, height or y / 1000)) ax = plt.axes([0, 0, 1, 1]) plt.scatter( list(as_coo.shape[1] - as_coo.col), list(as_coo.row), s=10, c=colors, marker=".", edgecolors="None", ) ax.xaxis.set_ticks_position("none") ax.yaxis.set_ticks_position("none") ax.xaxis.set_ticklabels([]) ax.yaxis.set_ticklabels([]) ax.set_ylim((0, self.matrix.shape[0])) ax.set_xlim((0, self.matrix.shape[1])) plt.box(False) if filename: plt.savefig(filename, dpi=dpi)