MATRIX_VIEW
Download Flojoy Studio to try this app
  
 Take a Matrix or OrderedPair DataContainer object as input, then visualize it in a Plotly table.   Params:    default : OrderedPair | Matrix  the DataContainer to be visualized in matrix format.     Returns:    out : Plotly  the DataContainer containing visualization of the input in matrix format    
Python Code
import numpy as np
import plotly.graph_objects as go
from flojoy import DCNpArrayType, Matrix, OrderedPair, Plotly, Vector, flojoy
CELL_SIZE = 50
FONT_SIZE = 10
MAX_ALLOWED_SHAPE = 8
v_dot = "$\\vdots$"
d_dot = "$\\ddots$"
l_dot = "$\\ldots$"
def numpy_2d_array_as_table(
    arr: DCNpArrayType,
    arr_row_shape: int,
    arr_col_shape: int,
    placeholder: str,
):
    new_arr = arr
    if arr_row_shape > MAX_ALLOWED_SHAPE or arr_col_shape > MAX_ALLOWED_SHAPE:
        new_arr = np.full(
            (MAX_ALLOWED_SHAPE, MAX_ALLOWED_SHAPE), placeholder, dtype=object
        )
        new_arr[:-2, :-2] = arr[: MAX_ALLOWED_SHAPE - 2, : MAX_ALLOWED_SHAPE - 2]
        last_row = arr[arr_row_shape - 1, :]
        first_cols = last_row[: MAX_ALLOWED_SHAPE - 2]
        new_arr[MAX_ALLOWED_SHAPE - 1, : MAX_ALLOWED_SHAPE - 2] = first_cols
        last_col = arr[:, arr.shape[1] - 1]
        first_rows = last_col[: MAX_ALLOWED_SHAPE - 2]
        new_arr[: MAX_ALLOWED_SHAPE - 2, MAX_ALLOWED_SHAPE - 1] = first_rows
        new_arr[MAX_ALLOWED_SHAPE - 1, MAX_ALLOWED_SHAPE - 1 :] = arr[
            arr_row_shape - 1, arr.shape[1] - 1 :
        ]
        new_arr[0, MAX_ALLOWED_SHAPE - 2] = l_dot
        new_arr[MAX_ALLOWED_SHAPE - 1, MAX_ALLOWED_SHAPE - 2] = l_dot
        new_arr[MAX_ALLOWED_SHAPE - 2, 0] = v_dot
        new_arr[MAX_ALLOWED_SHAPE - 2, MAX_ALLOWED_SHAPE - 1] = v_dot
    return new_arr.T
def numpy_1d_array_as_table(arr: DCNpArrayType):
    if arr.size > MAX_ALLOWED_SHAPE:
        converted_type = arr.astype(object)
        new_arr = converted_type[:MAX_ALLOWED_SHAPE]
        new_arr[MAX_ALLOWED_SHAPE - 2] = l_dot
    else:
        new_arr = arr
    return new_arr.reshape(-1, 1)
def numpy_array_as_table(arr: DCNpArrayType):
    ndim = arr.ndim
    if ndim == 1:
        cell_values = numpy_1d_array_as_table(arr)
    elif ndim > 2:
        raise ValueError("MATRIX_VIEW can process only 2D arrays!")
    else:
        row_shape, col_shape = arr.shape
        cell_values = numpy_2d_array_as_table(arr, row_shape, col_shape, d_dot)
    return cell_values
@flojoy
def MATRIX_VIEW(default: OrderedPair | Matrix) -> Plotly:
    """Take a Matrix or OrderedPair DataContainer object as input, then visualize it in a Plotly table.
    Parameters
    ----------
    default : OrderedPair | Matrix
        the DataContainer to be visualized in matrix format.
    Returns
    -------
    Plotly
        the DataContainer containing visualization of the input in matrix format
    """
    if isinstance(default, Matrix):
        np_arr = default.m
        cell_values = numpy_array_as_table(np_arr)
    elif isinstance(default, Vector):
        np_arr = default.v
        cell_values = numpy_array_as_table(np_arr)
    else:
        np_arr = default.y
        cell_values = numpy_array_as_table(np_arr)
    fig = go.Figure(
        data=[
            go.Table(
                header=dict(line={"width": 0}, values=[]),
                cells=dict(
                    values=cell_values,
                    line={"width": 3},
                    font={"size": FONT_SIZE},
                    height=CELL_SIZE,
                    align="center",
                    format=[".3"],
                ),
            )
        ]
    )
    width = MAX_ALLOWED_SHAPE * CELL_SIZE + 80
    height = width + 80
    fig.layout = go.Layout(
        autosize=False,
        width=width,
        height=height,
        margin=dict(l=0, r=0, t=0, b=0),
        xaxis=dict(visible=False),
        yaxis=dict(visible=False),
        hovermode="closest",
        font=dict(size=FONT_SIZE),
    )
    return Plotly(fig=fig)
Example App
Having problems with this example app? Join our Discord community and we will help you out!
In this example, MATRIX node generates 8x8 matrix and passes it MATRIX_VIEW node.