美国各州地图显示不正确的数据和颜色编码

Choropleth us-states map showing incorrect data and color coding

我正在尝试按类型显示美国各州的医院。我使用的数据集在这里 https://www.kaggle.com/carlosaguayo/usa-hospitals

我正在使用 choropleth,这是我的代码。我基本上有一个医院类型的下拉列表,当 select 时,我得到了计数

@app.callback(Output('figure-1', 'figure'),
             [Input('options-drop', 'value')])
def make_figure(varname):
    mygraphtitle = f'Hospitals of {varname}'
    mycolorscale = 'Blues' 
    mycolorbartitle = "Count"

    data=go.Choropleth(
        locations=df['STATE'],
        locationmode = 'USA-states', 
        z = df[df["TYPE"] == varname]["STATE"].value_counts(), 
        colorscale = mycolorscale,
        colorbar_title = mycolorbartitle,
    )
    fig = go.Figure(data)
    fig.update_layout(
        title_text = mygraphtitle,
        geo_scope='usa',
        width=1200,
        height=800
    )
    return fig

我有 3 个关于 grpah 的问题

  1. 并未显示所有州的数据
  2. 几个州显示的数据不正确
  3. 即使对于那些数据不正确的州,颜色编码也不正确。医院人数较多的州以浅蓝色显示,而医院人数较少的州以深蓝色显示

你可以从下面的pandas中看到,我可以看出德克萨斯州只有65家关键医院,但美国地图显示计数为78家,即使是78家,德克萨斯州的颜色与其他医院较低的州。我哪里错了?

这个我没有在Dash环境下验证过,但是我相信操作是一样的。原因是您正在为要设置的整个数据框指定一个状态列。最简单的响应是定位过滤后的数据框。

import plotly.graph_objects as go
import pandas as pd

df = pd.read_csv('./data/Hospitals.csv')
varname = 'CRITICAL ACCESS'
filtered_df = df[df["TYPE"] == varname]["STATE"].value_counts().to_frame('value')
#print(filtered_df)
fig = go.Figure(data=go.Choropleth(
    locations=filtered_df.index, 
    z = filtered_df['value'], 
    locationmode = 'USA-states', 
    colorscale = 'Blues',
    colorbar_title = "Count",
))

fig.update_layout(
    title_text = f'Hospitals of {varname}',
    geo_scope='usa', 
    width=1200,
    height=800
)

fig.show()