在Plotly Express中,我可以使用数据创建散点图.很容易:

import plotly.express as px

df = px.data.gapminder()

fig = px.scatter(df, x="gdpPercap", y="lifeExp", log_x=True, color='continent')

有没有办法将下拉菜单添加到绘图中,以便我也可以 Select 其他参数作为 colored颜色 ?这样做不应重置zoom .

除了使用Dash应用程序外,我想不出怎么做,但我仍然有一些问题:悬停不变,无法在分类 colored颜色 和数字 colored颜色 之间切换.让我告诉你我到目前为止所取得的成就:

import dash
from dash import dcc, html
from dash.dependencies import Input, Output
import plotly.express as px
import numpy as np
df = px.data.gapminder()
df["moreData1"] = np.random.normal(size = len(df))

labels = df.columns[df.dtypes=="float64"]
#labels = df.columns

options = [{'label': v, 'value': v} for v in labels]
app = dash.Dash(__name__)

fig = px.scatter(df, 
                 x="gdpPercap",
                 y="lifeExp", 
                 log_x=True, 
                 color=labels[1],
                 #color='continent',
                 render_mode='webgl'
                )

# somehow this line prevents from resetting the zoom. Do not really understand why.
fig.update_layout(uirevision='some_unique_value')
# Define the layout
app.layout = html.Div([
    dcc.Dropdown(
        id='color-dropdown',
        options=options,
        value=labels[-1]
    ),
    dcc.Graph(
        id='scatter-plot',
        figure=fig
    )
])

# Define the callback to update the scatter plot based on the selected color
@app.callback(
    Output('scatter-plot', 'figure'),
    [Input('color-dropdown', 'value')]
)
def update_scatter_plot(selected_color):
    fig.update_traces(
        marker_color=df[selected_color]
    )
    return fig

# Run the app
if __name__ == '__main__':
    app.run(debug=True, port=8052)

它以某种方式工作,但我希望有两个改进:我希望也能够显示类别值(不能像您看到的那样,通过设置labels = df.columns而不仅仅是数字列来工作.

更重要的是,我希望在悬停时显示 colored颜色 信息.

没有必要使用一个破折号应用程序,我想我会更高兴一个纯粹的情节情节.

推荐答案

在回调中,您需要使用selected_color完全重建数字(数字可以包含每个大陆的1个跟踪,也可以包含每个国家的1个跟踪,依此类推,没有跟踪更新).

此外,为了保持更新之间的zoom 范围,您可以使用State()读取当前范围并将其应用于新图形.

# Define the callback to update the scatter plot based on the selected color
@app.callback(
    Output('scatter-plot', 'figure'),
    Input('color-dropdown', 'value'),
    State('scatter-plot', 'figure'),
    prevent_initial_call=True
)
def update_scatter_plot(selected_color, fig):

    xrange = fig['layout']['xaxis']['range']
    yrange = fig['layout']['yaxis']['range']

    fig = px.scatter(df,
                     x="gdpPercap",
                     y="lifeExp",
                     log_x=True,
                     color=selected_color,
                     render_mode='webgl'
                     )

    fig.update_layout(xaxis_range=xrange, yaxis_range=yrange)

    return fig

Python相关问答推荐

在Python中添加期货之间的延迟

预期LP_c_Short实例而不是_ctyles.PyCStructType

云上Gunicorn的Flask-socketIO无法工作

在Docker中运行HAProxy时无法获得503服务

Python:记录而不是在文件中写入询问在多文件项目中记录的最佳实践

如何在Python中使用ijson解析SON期间检索文件位置?

数字梯度的意外值

如何销毁框架并使其在tkinter中看起来像以前的样子?

有条件地采样我的大型DF的最有效方法

列表上值总和最多为K(以O(log n))的最大元素数

使用mySQL的SQlalchemy过滤重叠时间段

max_of_three使用First_select、second_select、

如何让程序打印新段落上的每一行?

为什么默认情况下所有Python类都是可调用的?

如何更改分组条形图中条形图的 colored颜色 ?

numpy卷积与有效

如何让这个星型模式在Python中只使用一个for循环?

如何使用Pandas DataFrame按日期和项目汇总计数作为列标题

在pandas数据框中计算相对体积比指标,并添加指标值作为新列

如何根据rame中的列值分别分组值