首页 > 编程问答 >切换颜色和符号 scattermapbox -plotly dash

切换颜色和符号 scattermapbox -plotly dash

时间:2024-07-29 13:38:04浏览次数:8  
标签:python plotly mapbox plotly-dash

我试图包含两个单独的开关来改变散点图框的颜色和符号。颜色切换工作正常,而符号切换工作时,它会丢弃颜色。

我希望能够同时打开符号和颜色。可以吗?

注意:需要是scattermapbox

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

df = px.data.iris()
color_dict = {'versicolor': 'brown', 'setosa': 'orange', 'virginica': 'pink'}
symbol_dict = {'versicolor': 'star', 'setosa': 'circle', 'virginica': 'triangle'}

cmap = df["species"].map(color_dict)
smap = df["species"].map(symbol_dict)

app = dash.Dash(__name__)

app.layout = html.Div(
    [
        html.P("Toggle for the color"),
        dcc.Checklist(
            id="color_toggle",
            options=[{"label": "", "value": True}],
            value=[],
            inline=True
        ),
        html.P("Toggle for the symbol"),
        dcc.Checklist(
            id="symbol_toggle",
            options=[{"label": "", "value": True}],
            value=[],
            inline=True
        ),
        html.Div(
           dcc.Graph(id="chart"),
        ),
    ]
)

@app.callback(
    Output("chart", "figure"),
    [Input("color_toggle", "value"),
     Input("symbol_toggle", "value")
     ]
)

def update_fig(cmap_on, smap_on):

    fig = go.Figure(go.Scattermapbox(
        lat=df['sepal_width'],
        lon=df['sepal_length'],
        mode='markers',
        marker=dict(color = cmap if cmap_on else None,
                    symbol = smap if smap_on else None,
                    )
        )
    )

    fig.update_layout(height = 750,
                  mapbox=dict(
        accesstoken=mapboxtoken,
        style='light',
        )) 

    fig.update_mapboxes(zoom = 4)

    return fig


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

此代码的问题在于在回调中将颜色和符号都设置为 None ,如果 cmap_on smap_on 为 False。这意味着,如果任何一个开关关闭,颜色和符号都将被重置为其默认值。

若要解决此问题,需要分别检查颜色和符号,并仅在相应的开关关闭时才将其设置为 None

以下是如何执行此操作的更新后的回调函数:

@app.callback(
    Output("chart", "figure"),
    [Input("color_toggle", "value"),
     Input("symbol_toggle", "value")]
)
def update_fig(cmap_on, smap_on):
    # 为颜色和符号设置默认值
    marker = dict()

    # 如果颜色开关打开,则使用 cmap,否则使用默认颜色
    if cmap_on:
        marker['color'] = cmap

    # 如果符号开关打开,则使用 smap,否则使用默认符号
    if smap_on:
        marker['symbol'] = smap

    fig = go.Figure(go.Scattermapbox(
        lat=df['sepal_width'],
        lon=df['sepal_length'],
        mode='markers',
        marker=marker
        )
    )

    fig.update_layout(height=750,
                      mapbox=dict(
                          accesstoken=mapboxtoken,
                          style='light',
                      ))

    fig.update_mapboxes(zoom=4)

    return fig

在此代码中:

  1. 我们创建一个空的 marker 字典。
  2. 如果 cmap_on 为 True,我们将 cmap 分配给 marker['color'] 。否则,我们将保留默认颜色。
  3. 如果 smap_on 为 True,我们将 smap 分配给 marker['symbol'] 。否则,我们将保留默认符号。

通过这种方式,颜色和符号切换将独立工作,并且可以在不重置另一个的情况下启用或禁用一个。

标签:python,plotly,mapbox,plotly-dash
From: 78805493

相关文章

  • 12个Python数据类型转换实战演练
    文末赠免费精品编程资料~~在Python编程中,数据类型转换是处理数据时必不可少的技能。掌握如何灵活地在不同类型之间转换,能让你的代码更加高效和灵活。下面,我们将通过一系列实战演练,学习并实践12种常见的Python数据类型转换。1.整数转字符串实战案例:将年龄转换为字符串......
  • Python全套教程,小白零基础入门必备!
    Python是一种语法简单、功能强大的编程语言,它注重的是如何高效解决问题。【教程领取方式在文末!!】正是这种简单实用的特性,让Python成为近年来最热门的编程语言之一。Python具有广泛的应用场景,包括:Web开发、数据分析、机器学习、网络爬虫、人工智能、量化交易等众多领......
  • BP神经网络及其Python和MATLAB实现预测
    BP神经网络及其Python和MATLAB实现预测引言BP神经网络(BackPropagationNeuralNetwork),即反向传播神经网络,是一种通过反向传播算法进行监督学习的多层前馈网络。这种网络能够通过不断地调整和改变神经元的连接权重,达到对特定任务的学习和优化。由于其高度的灵活性和适应性......
  • 为什么Python要对引用非容器类型的类型实现循环GC
    检查文档:支持循环垃圾收集Python对检测和收集涉及循环引用的垃圾的支持需要对象类型的支持,这些对象类型是其他对象的“容器”,这些对象也可能是容器不存储对其他对象的引用或仅存储对原子类型(例如数字或字符串)的引用的类型不需要为垃圾收集提供任何显......
  • 如何在 Visual Studio Code 中降级终端中的 python?
    我有一段代码需要运行,但它仅与tensorflow1.3、1.4和1.5兼容。我想我需要降级python才能运行它,但是终端有python3.10我尝试创建虚拟环境失败,但终端仍然说它正在使用python3.10,所以我仍然无法运行代码有什么我可以做的吗?是对的,创建虚拟环境是运行不同Python版本代......
  • python-小李帮老师改错(赛氪OJ)
    [题目描述]老师给小理发了一封电子邮件,任务如下。写一个程序,给你 n 个数,输出 X。X=num1p1​​+num2p2​​+⋯+numnpn​​。                 num1​,num2​,⋯⋯,numn​ 都是整数,p1​,p2​,⋯⋯pn​ 都是一位数。但是出现了一些玄学错误,......
  • 保护从 py2exe python 生成的二进制文件
    我的项目需要将我的python文件转换为py2exe。公平地说,我的py2exe正在工作。假设我的二进制文件名为“test.exe”。我知道我的test.exe包含我的python文件的所有pyc文件。我想要做的是,保护我的text.exe,这样我的源代码就不会被看到,换句话说,我不希望它被反编译回来,我该怎......
  • python 将数字前面的字符替换为数字后面的新字符
    我有一些字符串看起来像:*.rem.1.gz和*.rem.2.gz我想将其替换为*.1.trim.gz和*.2.trim.gz1号文件和2号文件相互配对,我想创建一个单独的字符串来同时包含这两个文件。importosallfiles=os.listdirpair=[x.replace("rem.(\d+)","(\d+).trim")forxinall......
  • 使用python打开UNC文件
    如何使用python通过路径打开网络计算机上的文件?我当前正在使用os.startfile但随后出现错误winerror2:无法打开文件。文件路径是正确的,我可以通过win+R打开该文件。感谢您提供的任何帮助。importwin32wnetimportosdefopen_unc_path(unc_path,usern......
  • Python环境:深入理解与构建实践
    Python环境:深入理解与构建实践在当今的软件开发领域中,Python以其简洁的语法、丰富的库支持和广泛的应用场景,成为了众多开发者、数据科学家、机器学习工程师及自动化测试人员的首选语言。然而,要高效地使用Python进行项目开发,深入理解并合理构建Python环境是至关重要的。本文......