Skip to content

ARRAY_VIEW

Download Flojoy Studio to try this app
The ARRAY_VIEW node takes OrderedPair, DataFrame, Matrix, and Image DataContainer objects as input, and visualizes it in array format. Params: default : OrderedPair | DataFrame | Matrix | Image the DataContainer to be visualized in array format Returns: out : Plotly the DataContainer containing the visualization of the input in array format
Python Code
import numpy as np
import plotly.graph_objects as go
from flojoy import DataFrame, Image, Matrix, OrderedPair, Plotly, flojoy

CELL_SIZE = 50
FONT_SIZE = 10
MAX_ALLOWED_SHAPE = 10
l_dot = "$\\ldots$"


def numpy_array_as_table(arr: np.ndarray):
    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)


@flojoy
def ARRAY_VIEW(default: OrderedPair | Matrix | DataFrame | Image) -> Plotly:
    """The ARRAY_VIEW node takes OrderedPair, DataFrame, Matrix, and Image DataContainer objects as input, and visualizes it in array format.

    Parameters
    ----------
    default : OrderedPair | DataFrame | Matrix | Image
        the DataContainer to be visualized in array format

    Returns
    -------
    Plotly
        the DataContainer containing the visualization of the input in array format
    """

    if isinstance(default, OrderedPair):
        data = default.y
        cell_values = numpy_array_as_table(data)
    elif isinstance(default, DataFrame):
        data = default.m.to_numpy(dtype=object)
        data = data[:, :-1]
        cell_values = numpy_array_as_table(data)
    elif isinstance(default, Matrix):
        data = default.m
        cell_values = numpy_array_as_table(data)
    else:
        red = default.r
        green = default.g
        blue = default.b

        if default.a is None:
            merge = np.stack((red, green, blue), axis=2)
        else:
            alpha = default.a
            merge = np.stack((red, green, blue, alpha), axis=2)

        merge = merge.reshape(-1, merge.shape[-1])
        cell_values = numpy_array_as_table(merge)

    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"],
                ),
            )
        ]
    )
    if default.type == "image" or default.type == "dataframe":
        width = MAX_ALLOWED_SHAPE * CELL_SIZE + 800

    else:
        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)

Find this Flojoy Block on GitHub

Example App

Having problems with this example app? Join our Discord community and we will help you out!
React Flow mini map

In this example, we simulate data from LINSPACE, PLOTLY_DATASET, MATRIX and LOCAL_FILE nodes and visualize them with ARRAY_VIEW node.