由范围滑块控制的绘制组合条形图和表格

问题描述

我目前正在尝试使用 plotly 创建一个图表,

我的目标是创建一个组合的条形图/数据表,两者都用范围滑块控制,以便用日期控制值。我已经成功创建了由范围滑块控制的条形图。

我无法控制桌子:/

这是一个组合图,但范围滑块附加到表格,如您所见,它不控制日期,而是控制表格视图 https://plotly.com/~tristan1551/31/

这是我使用范围滑块 https://plotly.com/~tristan1551/23/

完成的条形图示例

一个想法是只用游侠滑块控制桌子,我也不能经理这样做。

有没有办法实现我想做的事?

谢谢你的帮助:)

解决方法

  • 要将表格与图形上的范围滑块同步,您可以使用破折号回调
  • 下面的代码创建一个带有范围滑块
  • 的条形图
  • 将回调附加到 figure 中的更改以获取 rangeslider
  • 的位置
  • 根据这些输入构建表格
from jupyter_dash import JupyterDash
import dash_core_components as dcc
import dash_html_components as html
import dash_table
from dash.dependencies import Input,Output,State
import pandas as pd
import numpy as np
import plotly.express as px

df = pd.DataFrame({"date": pd.date_range("1-jan-2020",periods=365 * 2),"value": np.random.uniform(1,5,365 * 2),})
fig = px.bar(df,x="date",y="value").update_layout(
    xaxis={
        "range": [df["date"].quantile(0.9),df["date"].max()],"rangeslider": {"visible": True},}
)

# Build App
app = JupyterDash(__name__)
app.layout = html.Div(
    [dcc.Graph(id="bargraph",figure=fig),html.Div(id="bartable",children=[])],)


@app.callback(
    Output("bartable","children"),Input("bargraph","relayoutData"),)
def updateTable(graphData):
    global df
    if graphData and "xaxis.range" in graphData.keys():
        d1 = pd.to_datetime(graphData["xaxis.range"][0])
        d2 = pd.to_datetime(graphData["xaxis.range"][1])
    else:
        d1 = df["date"].quantile(0.9)
        d2 = df["date"].max()
    dft = df.loc[df["date"].between(d1,d2)]
    return dash_table.DataTable(
        columns=[{"name": c,"id": c} for c in dft.columns],data=dft.to_dict("records"),)


# Run app and display result inline in the notebook
app.run_server(mode="inline")

enter image description here