Esempio n. 1
0
def view() -> Column:
    """The about view of awesome-panel.org"""
    return Column(
        Markdown(ABOUT_PATH.read_text()),
        sizing_mode="stretch_width",
        name="About",
    )
Esempio n. 2
0
def view() -> Column:
    """The home view of awesome-panel.org"""
    return Column(
        Markdown(HOME_PATH.read_text()),
        name="Home",
        sizing_mode="stretch_width",
    )
Esempio n. 3
0
def view() -> Column:
    """The resources view of awesome-panel.org"""
    return Column(
        Markdown(RESOURCES_PATH.read_text()),
        sizing_mode="stretch_width",
        name="Resources",
    )
Esempio n. 4
0
def test_app():
    data = {"x": [1, 2, 3, 4, 5], "y": [3800, 3700, 3800, 3900, 4000]}

    trend = Trend(
        title="Panel Users",
        value=4000,
        value_change=0.51,
        data=data,
        height=200,
        width=200,
    )

    def update_datasource():
        new_x = max(data["x"]) + 1
        old_y = data["y"][-1]
        new_y = random.uniform(-old_y * 0.05, old_y * 0.05) + old_y * 1.01
        trend.stream({"x": [new_x], "y": [new_y]}, rollover=50)

        y_series = data["y"]
        trend.value = y_series[-1]
        change = y_series[-1] / y_series[-2] - 1
        trend.value_change = change

    settings_panel = Param(
        trend,
        parameters=[
            "height",
            "width",
            "sizing_mode",
            "layout",
            "title",
            "plot_color",
            "plot_type",
            "value_change_pos_color",
            "value_change_neg_color",
        ],
        widgets={
            "height": {"widget_type": IntSlider, "start": 0, "end": 800, "step": 1},
            "width": {"widget_type": IntSlider, "start": 0, "end": 800, "step": 1},
        },
        sizing_mode="fixed",
        width=400,
    )
    app = Column(
        HTML(
            "<h1>Panel - Streaming to TrendIndicator<h1>",
            sizing_mode="stretch_width",
            background="black",
            style={"color": "white", "padding": "15px"},
        ),
        Row(WidgetBox(settings_panel), trend, sizing_mode="stretch_both"),
        sizing_mode="stretch_both",
    )
    state.add_periodic_callback(update_datasource, period=50)
    return app
Esempio n. 5
0
    def view(self,) -> Column:
        """The gallery view of awesome-panel.org"""
        buttons = []
        for app in self.apps_in_gallery:
            buttons.append(GalleryCard(app, self.page_outlet,))

        return Column(
            Markdown(TEXT),
            info(),
            HSpacer(height=25),
            Divider(),
            *buttons,
            name="Gallery",
            sizing_mode="stretch_width",
        )
def generateBokehApp(doc):
    sid = str(doc.session_context.request.arguments['sid'][0].decode('utf-8'))
    reset_plots(sid)

    df = get_filtered_df(sid)

    class SelectedDataLink(Link):
        _requires_target = True

    class SelectedDataCallback(LinkCallback):

        source_model = 'selected'
        source_handles = ['cds']
        on_source_changes = ['indices']

        target_model = 'cds'

        source_code = "let len = {}".format(len(df.columns)) + """
                    let new_indices = []
                    for (let i = 0; i < source_selected.indices.length; i++){
                        let index = source_selected.indices[i]
                        j = len-1-(index%len)+Math.floor(index/(len))*(len)
                        new_indices[i] = j
                    }
                    var inds = source_selected.indices
                    var d = source_cds.data

                    selected_data = {}
                    selected_data['index1'] = []
                    selected_data['index2'] = []
                    selected_data['value'] = []
                    selected_data['zvalues'] = []

                    for (var i = 0; i < inds.length; i++){
                        selected_data['index1'].push(d['index1'][inds[i]])
                        selected_data['index2'].push(d['index2'][inds[i]])
                        selected_data['value'].push(d['value'][inds[i]])
                        selected_data['zvalues'].push(d['zvalues'][inds[i]])
                    }
                    target_cds.data = selected_data

                """

    SelectedDataLink.register_callback('bokeh', SelectedDataCallback)



    # Set theme for holoviews plots
    theme = Theme(
        json={
            'attrs': {
                'Figure': {
                    'background_fill_color': None,
                    'border_fill_color': None,
                    'outline_line_color': None,
                },
                'Grid': {
                    'grid_line_dash': [6, 4],
                    'grid_line_alpha': .3,
                },

                'Axis': {
                    'major_label_text_color': 'black',
                    'axis_label_text_color': 'black',
                    'major_tick_line_color': 'black',
                    'minor_tick_line_color': 'black',
                    'axis_line_color': "black"
                },

                'ColorBar': {
                    'background_fill_color': None,
                },

                'Nodes': {
                    'hover_fill_color': 'green',
                },

                'Points': {
                    'hover_fill_color': 'green',
                },

                'Graph': {
                    'hover_fill_color': 'green',
                }
            }
        })
    renderer('bokeh').theme = theme
    renderer('bokeh').webgl = True

    class VisApp(Parameterized):
        Screen1 = ObjectSelector(default="force",
                                       objects=["none", "radial", "force", "hierarchical", "3d"])

        Screen2 = ObjectSelector(default="matrix",
                                       objects=["none", "matrix"])

        Ordering = ObjectSelector(default="ward",
                                        objects=["none", "single", "average", "complete", "centroid", "weighted",
                                                 "median", "ward"])

        Metric = ObjectSelector(default="euclidean",
                                      objects=["euclidean", "minkowski", "cityblock", "sqeuclidean", "cosine",
                                               "correlation", "hamming", "jaccard", "chebyshev", "canberra",
                                               "braycurtis"])

        Color_palette = ObjectSelector(default='kbc',
                                             objects=['kbc', 'kgy', 'bgy', 'bmw', 'bmy', 'cividis', 'dimgray', 'fire',
                                                      'inferno', 'viridis'])
        Node_size = ObjectSelector(default='indegreesize', 
                                            objects=['indegreesize', 'outdegreesize', 'totaldegreesize', 'inweightsize', 'outweightsize', 'totalweightsize'])

        Node_color = ObjectSelector(default='totalweight', 
                                            objects=['indegree', 'outdegree', 'totaldegree', 'inweight', 'outweight', 'totalweight'])

        Ran = Boolean(default=False)

        def __init__(self, datashaded = True):
            self.datashaded = datashaded

            super(VisApp, self).__init__()

        @depends('Screen1', 'Screen2', 'Ordering', 'Metric', 'Color_palette', 'Node_size', 'Node_color')
        def view(self):
            if self.Screen1 == "radial":
                set_screen1("radial", sid)
                populate_radial_diagram(df, sid, datashaded=self.datashaded)
            if self.Screen1 == "force":
                set_screen1("force", sid)
                populate_force_diagram(df, sid, datashaded=self.datashaded)
            if self.Screen1 == "hierarchical":
                set_screen1("hierarchical", sid)
                populate_hierarchical_diagram(df, sid, datashaded=self.datashaded)
            if self.Screen1 == "3d":
                set_screen1("3d", sid)
                populate_3d_diagram(df, sid)
            # print(s1[1])
            screen1 = get_custom_key(get_screen1(sid), sid)

            if self.Screen1 == "3d":
                zero_zero = Column(get_custom_key(get_screen1(sid), sid), css_classes=['screen-1', 'col-s-6'])
            else:
                screen1.color_palette = self.Color_palette
                screen1.node_size = self.Node_size
                screen1.node_color = self.Node_color
                set_custom_key(get_screen1(sid), screen1, sid)

            if self.Screen2 == "matrix":
                set_screen2("matrix", sid)
                populate_matrix(get_matrix_df(sid), sid)
                screen2 = get_custom_key(get_screen2(sid), sid)
                screen2.reordering = self.Ordering
                screen2.metric = self.Metric
                screen2.color_palette = self.Color_palette
                set_custom_key(get_screen2(sid), screen2, sid)

                matrix = screen2.view()

                edge_table = Table(matrix.data).opts(height=int(get_window_height(sid)/3), width=290)

                SelectedDataLink(matrix, edge_table)

                zero_one = Column(matrix, css_classes=['screen-2', 'col-s-6'])

                if self.Screen1 != "3d":
                    # Setting up the linking, generateDiagram functions return two-tuple (graph, points). Points is the selection layer
                    # makeMatrix returns matrix_dropdown object. matrix.view returns the heatmap object
                    SelectMatrixToNodeLink.register_callback('bokeh', SelectMatrixToNodeCallback)
                    SelectNodeToMatrixLink.register_callback('bokeh', SelectNodeToMatrixCallback)
                    SelectNodeToTableLink.register_callback('bokeh', SelectNodeToTableCallback)

                    graph, points = screen1.view()

                    node_table = Table(points.data[['index', 'indegree', 'outdegree']]).opts(height=int(get_window_height(sid)/3), width=290)

                    # Link matrix to the nodelink (both graph and points)
                    SelectMatrixToNodeLink(matrix, points)
                    SelectNodeToTableLink(points, node_table)

                    # Link nodelink to matrix (points only)
                    SelectNodeToMatrixLink(points, matrix)

                    # For highlighting edges when tapping on node, but doesn't work
                    # if not self.datashaded:
                    #     PointToGraphLink.register_callback('bokeh', PointToGraphCallback)
                    #     PointToGraphLink(points, graph)

                    zero_zero = Column(graph * points, css_classes=['screen-1', 'col-s-6'])
                    if not self.Ran:
                        zero_two = Row(Column(node_table, css_classes=['node-table', 'invisible']),
                                                Column(edge_table, css_classes=['edge-table', 'invisible']),
                                                css_classes=['trash'])
                else:
                    if not self.Ran:
                        zero_two = Row(Column(edge_table, css_classes=['edge-table', 'invisible']),
                                                css_classes=['trash'])

                # SelectedDataLink(matrix, points)
                # renderer = renderer('bokeh')
                # print(renderer.get_plot(points).handles)

            if not self.Ran:
                self.Ran = True
                return Row(zero_zero, zero_one, zero_two, css_classes=['good-width'])

            return Row(zero_zero, zero_one, css_classes=['good-width'])

    visApp = VisApp(datashaded=get_datashading(sid))
    set_visualisations_app(visApp, sid)

    extension('plotly')
    # Don't use pn.Pane since that messes up linking
    return Column(visApp.view).get_root(doc)
        def view(self):
            if self.Screen1 == "radial":
                set_screen1("radial", sid)
                populate_radial_diagram(df, sid, datashaded=self.datashaded)
            if self.Screen1 == "force":
                set_screen1("force", sid)
                populate_force_diagram(df, sid, datashaded=self.datashaded)
            if self.Screen1 == "hierarchical":
                set_screen1("hierarchical", sid)
                populate_hierarchical_diagram(df, sid, datashaded=self.datashaded)
            if self.Screen1 == "3d":
                set_screen1("3d", sid)
                populate_3d_diagram(df, sid)
            # print(s1[1])
            screen1 = get_custom_key(get_screen1(sid), sid)

            if self.Screen1 == "3d":
                zero_zero = Column(get_custom_key(get_screen1(sid), sid), css_classes=['screen-1', 'col-s-6'])
            else:
                screen1.color_palette = self.Color_palette
                screen1.node_size = self.Node_size
                screen1.node_color = self.Node_color
                set_custom_key(get_screen1(sid), screen1, sid)

            if self.Screen2 == "matrix":
                set_screen2("matrix", sid)
                populate_matrix(get_matrix_df(sid), sid)
                screen2 = get_custom_key(get_screen2(sid), sid)
                screen2.reordering = self.Ordering
                screen2.metric = self.Metric
                screen2.color_palette = self.Color_palette
                set_custom_key(get_screen2(sid), screen2, sid)

                matrix = screen2.view()

                edge_table = Table(matrix.data).opts(height=int(get_window_height(sid)/3), width=290)

                SelectedDataLink(matrix, edge_table)

                zero_one = Column(matrix, css_classes=['screen-2', 'col-s-6'])

                if self.Screen1 != "3d":
                    # Setting up the linking, generateDiagram functions return two-tuple (graph, points). Points is the selection layer
                    # makeMatrix returns matrix_dropdown object. matrix.view returns the heatmap object
                    SelectMatrixToNodeLink.register_callback('bokeh', SelectMatrixToNodeCallback)
                    SelectNodeToMatrixLink.register_callback('bokeh', SelectNodeToMatrixCallback)
                    SelectNodeToTableLink.register_callback('bokeh', SelectNodeToTableCallback)

                    graph, points = screen1.view()

                    node_table = Table(points.data[['index', 'indegree', 'outdegree']]).opts(height=int(get_window_height(sid)/3), width=290)

                    # Link matrix to the nodelink (both graph and points)
                    SelectMatrixToNodeLink(matrix, points)
                    SelectNodeToTableLink(points, node_table)

                    # Link nodelink to matrix (points only)
                    SelectNodeToMatrixLink(points, matrix)

                    # For highlighting edges when tapping on node, but doesn't work
                    # if not self.datashaded:
                    #     PointToGraphLink.register_callback('bokeh', PointToGraphCallback)
                    #     PointToGraphLink(points, graph)

                    zero_zero = Column(graph * points, css_classes=['screen-1', 'col-s-6'])
                    if not self.Ran:
                        zero_two = Row(Column(node_table, css_classes=['node-table', 'invisible']),
                                                Column(edge_table, css_classes=['edge-table', 'invisible']),
                                                css_classes=['trash'])
                else:
                    if not self.Ran:
                        zero_two = Row(Column(edge_table, css_classes=['edge-table', 'invisible']),
                                                css_classes=['trash'])

                # SelectedDataLink(matrix, points)
                # renderer = renderer('bokeh')
                # print(renderer.get_plot(points).handles)

            if not self.Ran:
                self.Ran = True
                return Row(zero_zero, zero_one, zero_two, css_classes=['good-width'])

            return Row(zero_zero, zero_one, css_classes=['good-width'])
Esempio n. 8
0
def info():
    """An InfoAlert with relevant text"""
    return Column(
        InfoAlert(text=INFO_TEXT),
        sizing_mode="stretch_width",
    )