如果未单击第一个图形,则不会加载第二个图形Plotly Dash

问题描述

我正在开展一个 Dash Plotly 项目,该项目将美国总统选举数据可视化。我的项目的一个部分显示了可以通过选择不同的州来更改的县区域分布图。这张地图的右侧是任何县的每次选举中双方获得的选票百分比。第二个图表是通过点击 choropleth 县地图来填充的。

这一切正常,但我遇到的问题是,当我切换状态时,等值线图更新得很好,但第二个图变空白,直到我再次单击地图才会填充。

>

我试图通过将第二个图表设置为在单击县之前切换状态时首先按字母顺序显示一个县来解决此问题。但是,它似乎无法正常工作。

这是我的代码的简短片段:

MySet({'b','c','a'})
New_name({'b','a'})

有人可以帮我找到我遗漏的部分吗?任何帮助,将不胜感激! 谢谢!

解决方法

问题出在您的 update_figure4 回调中的这一行(在 else 语句中):

county_id = new_df["County"][0]

如果您加载页面并在下拉列表中选择 District of Columbia,则 new_df["County"] 的值如下:

3     District of Columbia
7     District of Columbia
11    District of Columbia
Name: County,dtype: object

如您所见,返回的数据中没有索引为 0 的行,因此 new_df["County"][0] 将失败。

new_df["County"][3] 在这种情况下可以工作,但问题当然是,当您访问它时,数据集中可能并不总是有索引为 3 的行在回调中。

改为使用 iloc

county_id = new_df["County"][0]

根据评论更新

如果我只点击一个县,然后从下拉菜单中切换到一个新的州,第二个图表就会再次变为空白

这样做的原因是您还需要考虑选择县的情况,但该县与下拉列表中选择的州不对应。

由于您的 else 子句中已经有逻辑,如果没有选择县,则为右侧的图表提供默认值,因此当点击数据中的县不对应时,您可以使用相同的逻辑选择的状态。

所以你可以这样做:

if click_county_select:
    new_df = data[data["State"] == state_select]
    county_id = click_county_select["points"][0]["customdata"][3]
    new_df2 = new_df[new_df["County"] == county_id]

    counties = new_df["County"].values
    if county_id not in counties:
        new_df = data[data["State"] == state_select]
        county_id = new_df["County"].iloc[0]
        new_df2 = new_df[new_df["County"] == county_id]
else:
    new_df = data[data["State"] == state_select]
    county_id = new_df["County"].iloc[0]
    new_df2 = new_df[new_df["County"] == county_id]

现在我只是懒洋洋地复制粘贴了新的 else 语句中 if 子句中的代码,但是您可以在其自己的函数中提取重用的逻辑并多次调用它符合不要重复自己。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...