python - 使用破折号回调生成多个图

标签 python plotly plotly-dash

我不清楚如何一次动态创建多个图表 - 或者如果这不可能,那么我如何使用单个回调遍历值列表。

例如,在下面的代码中,大洲列表 是一个过滤器选项列表。是否可以基本上做到这一点,以便在加载此页面时自动看到 5 个图表?

目前,我正在做的是我必须输入 5 @app.callback...make_scatter_plot(option=_dropdown_value) 这最终会在我的文件中包含一百万行代码并使即使所有内容都在做同样的事情,也很难阅读。

我错过了什么?谢谢

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

app = Dash(__name__)

df = px.data.gapminder()

list_of_continents = ["Asia", "Africa", "Europe", 'Oceania', 'Americas']
app.layout = html.Div([
    html.H4('Restaurant tips by day of week'),
    dcc.Dropdown(
        id="dropdown",
        options=list_of_continents,

        multi=False
    ),
    dcc.Graph(id="graph"),
    #dcc.Graph(id ='graph2') ##???? 
])


@app.callback(
    Output("graph", "figure"),
    Input("dropdown", "value")
    )
def make_scatter_plot(  value =[i for i in list_of_continents], df = df):
    """
    
    """
    data = df[df['continent'].isin([value])]
    
    fig = px.scatter(data, x="lifeExp", y="gdpPercap", 
                 size="pop")
    return fig


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

最佳答案

虽然 plotly express 可以帮助您仅用一行代码设置图表,但在自定义每条轨迹时并不是很方便。因此,为此,您必须切换到 graphs_objects。
在以下代码行中,回调为每个跟踪生成一个图形组件,并将每个图形组件附加到一个 Div 组件。因此,您可以使用单个回调获得多个图表。

from dash import Dash, dcc, html, Input, Output
import plotly.express as px
import plotly.graph_objects as go
import pandas as pd 
import numpy as np 

app = Dash(__name__)

df = px.data.gapminder()


app.layout = html.Div([
    html.H4('Restaurant tips by day of week'),

    html.Div(id='graphs',children=[])
   
])


@app.callback(
    Output("graphs", "children"),
    Input("graphs", "children")
    )
def make_scatter_plot(child):
    """
    
    """

    for continent in df['continent'].unique():
        df_filtered = df[df['continent'] == continent]
        fig = go.Figure()
        fig.add_trace(
            go.Scatter(x = df_filtered['lifeExp'],
                       y = df_filtered['gdpPercap'],
                       mode = 'markers',
                       marker = dict(size = 10 + (df_filtered['pop'] - df_filtered['pop'].min()) * 20 
                       / (df_filtered['pop'].max() - df_filtered['pop'].min())) # This is just to scale the marker size value between 10 and 20. 
                       )
            )
        fig.update_layout(
            title_text = continent
        )
        child.append(dcc.Graph(figure=fig))


    return child


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

代码的输出: Click here

关于python - 使用破折号回调生成多个图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72412927/

相关文章:

python - 如何在 python 中解析字符串?

python - 如何在Python中创建具有两列作为元组或Pandas数据框的单个变量?

python - aiohttp 下载大量 pdf 文件列表

R:如何停止在绘图图表上将百分比四舍五入到小数点后 0 位?

python - 通过 Flask 框架将 Dash 条形图插入 HTML 页面

python - 根据多个值将矩阵划分为更小的矩阵

r - 如何从ggplotly图中删除选项栏?

r - 带 Plotly 的树形图 : Blank Screen?

plotly-dash - 从 Dash 中的所有其他下拉列表中删除选项

python - 如何查看 Dash 应用程序中的活跃用户数?