Plotly bodový aktualizovat tabulku s souvisejících dat po klepnutí na bod

0

Otázka

Chtěl bych být schopen aktualizovat tabulku s relevantní informace po kliknutí na bod v Plotly bodový graf, v Pythonu. Nebo jinými slovy, když jsem klepněte na bod v bodovém grafu (UMAP pozemku konkrétně) v tabulce se zobrazí data pro tento cluster (druhy) jsem pomocí Scikit-learn Iris dataset, aby se pokusili tento.

from umap import UMAP
import plotly.express as px
from sklearn.datasets import load_iris

df = px.data.iris()

features = df.loc[:, :'petal_width']

umap_2d = UMAP(n_components=2, init='random', random_state=0)

proj_2d = umap_2d.fit_transform(features)

fig = px.scatter(
    proj_2d, x=0, y=1,
    color=df.species, 
    labels={'color': 'species'}
)
fig.show() 

A já jsem vytvoření tabulky jako tak, pomocí iris dataset csv soubor z https://datahub.io/machine-learning/iris:

import pandas as pd
import numpy as np
import plotly.graph_objects as go

iris_df = pd.read_csv("iris_csv.csv")
table = go.Figure(data=[go.Table(
    header=dict(values=list(iris_df.columns),
                fill_color='paleturquoise',
                align='left'),
    cells=dict(values=[iris_df.sepallength, iris_df.sepalwidth, iris_df.petallength, iris_df.petalwidth, iris_df.species],
               fill_color='lavender',
               align='left'))
])

table.show()

Moje myšlení bylo aktualizovat tabulku s filtrem na základě "Druh" označení bodu pomocí 'on_click' funkce. Nicméně, všechno, co jsem se snažil selhal tak daleko a je to spíše pro mě nové. Nějaké nápady by ocenili.

plotly plotly-dash plotly-python python
2021-11-24 01:56:33
1

Nejlepší odpověď

0

Zde je způsob, jak to udělat pomocí ipywidgets v jupyter notebooku. Stále se snažím najít způsob, jak vložit do webové stránky, nicméně...

import plotly.graph_objs as go
import plotly.express as px
import umap.umap_ as umap
from umap import UMAP
from ipywidgets import HBox, VBox


df = px.data.iris()


features = df.loc[:, :'petal_width']

umap = UMAP(n_components=2, init='random', random_state=0)

projection = umap.fit_transform(features)
print(projection)

cs = [[0, '#EF553B'], [0.5, '#636EFA'], [1.0, '#00CC96']]

f = go.FigureWidget([go.Scatter(
    x = projection[:,0],
    y = projection[:,1],
    mode = 'markers', 
    marker=dict(
        size=10,
        color=df['species_id'],
        colorscale=cs,
        line=dict(
            width=1,
            color='Black'
        )
    )
)])
scatter = f.data[0]


t = go.FigureWidget([go.Table(
    header=dict(values=['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'species', 'species_id'],
                fill = dict(color='#C2D4FF'),
                align = ['left'] * 5),
    cells=dict(values=[df[col] for col in ['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'species', 'species_id']],
               fill = dict(color='#F5F8FF'),
               align = ['left'] * 5))])

def selection_fn(trace,points,selector):
    t.data[0].cells.values = [df.loc[points.point_inds][col] for col in ['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'species', 'species_id']]

scatter.on_selection(selection_fn)


VBox((HBox(),f,t))

Nějaké nápady?

2021-12-22 06:38:29

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................