是否可以过滤第一行始终未过滤的破折号数据表

Is it possible to filter the dash datatable with the first row always unfiltered

我需要在破折号中绘制 3d 散点图和数据 table。

我的意图是能够使用数据table来过滤散点图。我的数据的第一行是目标。过滤器是否可以始终保留第一行?

例如,我尝试使用 solar.csv 构建模型:

from dash import Dash, dash_table
import pandas as pd
from dash.dependencies import Input, Output
import plotly.express as px
from dash import Dash, dash_table, html, dcc


df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/solar.csv')



app = Dash(__name__)

app.layout = dash_table.DataTable(
    df.to_dict('records'), 
    [{"name": i, "id": i} for i in df.columns],
    filter_action='native'
)

app.layout = html.Div([
    dash_table.DataTable(
        id='datatable-interactivity',
        data = df.to_dict('records'), 
        columns = [{"name": i, "id": i} for i in df.columns],
        filter_action='native'
    ),
    html.Div(id='scatter-container')

])

@app.callback(
    Output(component_id='scatter-container', component_property='children'),
    Input(component_id='datatable-interactivity', component_property="derived_virtual_data")
)
def update_scatter(all_rows_data):
    dff = pd.DataFrame(all_rows_data)
    fig = px.scatter(dff, x='Number of Solar Plants', y = 'Generation (GWh)')
    return dcc.Graph(figure=fig)

if __name__ == '__main__':
    app.run_server(debug=True)

假设第一行 (California) 是我的目标,当我在过滤器字段中键入“Arizona”并因此在散点图中同时显示 California 和 Arizona 时,是否可以同时显示 California 和 Arizona?

提前致谢。

可能有很多方法,但始终显示固定行的一种方法是在过滤后的数据框创建的图表上创建一个额外的图表。 go 的图形对象用于添加标记。而且,我将悬停数据与原始图表进行了匹配。

def update_scatter(all_rows_data):
    dff = df if all_rows_data is None else pd.DataFrame(all_rows_data)
    fig = px.scatter(dff, x='Number of Solar Plants', y='Generation (GWh)')
    fig.add_trace(go.Scatter(x=[df.loc[0, 'Number of Solar Plants']],
                             y=[df.loc[0,'Generation (GWh)']],
                             mode='markers',
                             marker=dict(color='#636efa'),
                             showlegend=False,
                             hovertemplate='Number of Solar Plants=%{x}<br>Generation (GWh)%{y}'
                            ))
    return dcc.Graph(figure=fig)