def build_matrix(cls, vnames, matrix, latex_map=None): """build latex correlation matrix""" # ret_link = '<a onclick="$(\'#%s\').toggle()" href="#">Show Latex</a>'%uid headers = [""] + list(vnames) data = [] color = {} grad = Gradient( (-1.0, 120.0, 120.0, 250.0), (0.0, 250.0, 250.0, 250.0), (1.0, 250.0, 100.0, 100.0), ) for i, v1 in enumerate(vnames): tmp = [v1] for j in range(len(vnames)): m = matrix[i][j] tmp.append(m) color[(i + 1, j + 1)] = grad(m) # +1 for header on the side and top data.append(tmp) table = LatexTable(headers=headers, data=data, rotate_header=True, latex_map=latex_map) table.float_format = "%.2g" for (i, j), c in color.items(): table.set_cell_color(i, j, c) return table
def test_color_3(): g = Gradient((-1, 50, 50, 250), (0, 100, 100, 100), (1, 250, 50, 50)) assert g.rgb(-1) == "rgb(50,50,250)" assert g.rgb(-0.5) == "rgb(75,75,175)" assert g.rgb(0) == "rgb(100,100,100)" assert g.rgb(0.5) == "rgb(175,75,75)" assert g.rgb(1) == "rgb(250,50,50)"
def test_color_2(): g = Gradient((-1, 10, 10, 20), (2, 20, 20, 10)) assert g.rgb(-1) == "rgb(10,10,20)" assert g.rgb(2) == "rgb(20,20,10)" assert g.rgb(-1.00001) == "rgb(10,10,20)" assert g.rgb(1.99999) == "rgb(20,20,10)" assert g.rgb(0.5) == "rgb(15,15,15)"
def matrix(m): is_correlation = True for i in range(len(m)): if m[i][i] != 1.0: is_correlation = False break if not is_correlation: n = len(m) args = [] for mi in m: for mj in mi: args.append(mj) nums = matrix_format(*args) grad = Gradient( (-1.0, 120.0, 120.0, 250.0), (0.0, 250.0, 250.0, 250.0), (1.0, 250.0, 100.0, 100.0), ) s = Html() with table(s): with tr(s): s += "<td/>\n" for v in m.names: with th(s): s += v for i, v in enumerate(m.names): with tr(s): with th(s): s += v for j in range(len(m.names)): val = m[i][j] if is_correlation: if i == j: with td(s): s += " 1.00" else: color = grad.rgb(val) with td(s, style="background-color:" + color): s += "%5.2f" % val else: if i == j: with td(s): s += nums[n * i + j] else: color = grad.rgb(val / (m[i][i] * m[j][j])**0.5) with td(s, style="background-color:" + color): s += nums[n * i + j] return str(s)
def matrix(m): is_correlation = True for i in range(len(m)): if m[i][i] != 1.0: is_correlation = False break if not is_correlation: n = len(m) args = [] for mi in m: for mj in mi: args.append(mj) nums = matrix_format(*args) grad = Gradient( (-1.0, 120.0, 120.0, 250.0), (0.0, 250.0, 250.0, 250.0), (1.0, 250.0, 100.0, 100.0), ) rows = [] for i, v in enumerate(m.names): cols = [th(v)] for j in range(len(m.names)): val = m[i][j] if is_correlation: if i == j: t = td("1.00") else: color = grad.rgb(val) t = td( "%5.2f" % val, style="background-color:" + color + ";color:black", ) else: if i == j: t = td(nums[n * i + j]) else: num = m[i][i] * m[j][j] color = grad.rgb(val / num**0.5 if num > 0 else 0) t = td( nums[n * i + j], style="background-color:" + color + ";color:black", ) cols.append(t) rows.append(tr(*cols)) return to_str(table(tr(td(), *[th(v) for v in m.names]), *rows))