0

我正在使用 Jupyter Notebook 中的 Plotly 编写地图,大多数都在工作,但在某些情况下,它无法正确显示 - 参见照片。

我似乎无法找出它为什么不显示或如何解决它。

右侧没有比例尺的 Plotly 地图图像

#DESTINATION Delay for each airport within a carrier network plotted on map
airline_data_frames = []
airport_list = df['DEST_AIRPORT_ID'].tolist()
airport_set = set(airport_list)
for carrier in carrier_dict:
    cur_carrier_df = carrier_dict[carrier]
    dict_airport=get_dataframe_unique_column_DEST_AIRPORT_ID(cur_carrier_df)
    out_df = pd.DataFrame(columns=["NAME", "ARR_DELAY_MEAN","PERCENT_OF_AIR_TRAFFIC",         
    "LONGITUDE","LATITUDE"])
    for name in airport_set:
        if name not in (dict_airport):
            continue
        cur_df = dict_airport[name]
        airport = cur_df['DEST_AIRPORT_ID'].iloc[0]
        dest = cur_df['DEST'].iloc[0]
        arr_delay = cur_df.ARR_DELAY.mean()
        if arr_delay < 0 :
            arr_delay=0
        length = len(cur_df)/len(cur_carrier_df) * 100
        lat, long = look_up_long_lat(dest)
        airport = cur_df['DEST_CITY_NAME'].iloc[0]
        out_df = out_df.append({"NAME": airport, "ARR_DELAY_MEAN": arr_delay,         
        "PERCENT_OF_AIR_TRAFFIC":length, 
        "LONGITUDE":long.values[0],"LATITUDE":lat.values[0]}, ignore_index=True)
    print(look_up_carrier_by_initial(carrier))
    print(out_df.describe())
    fig = px.scatter_geo(out_df, lon = 'LONGITUDE',lat = 'LATITUDE', color="ARR_DELAY_MEAN", 
    hover_name="NAME", size="PERCENT_OF_AIR_TRAFFIC",projection="albers usa",scope="USA")
    fig.show()
    fig = None
4

1 回答 1

0

在重新审视这一点时,我在 Plotly 文档中发现了这一点:

“大多数 Plotly Express 函数接受一个颜色参数,如果数据是非数字的,它会自动将数据值分配给离散颜色。如果数据是数字,颜色将自动被认为是连续的。这意味着必须解析数字字符串才能使用对于连续颜色,反之,用作类别代码的数字必须转换为字符串。” 链接到源

我通过在添加一行时明确说明 ARR_DELAY_MEAN 列的类型为 float 来解决它。但是,这也可以通过使用 pd.to_numeric 函数将列更改为数字来完成。

我的解决方案:

 out_df = out_df.append({"NAME": airport, "ARR_DELAY_MEAN": float(arr_delay),         
        "PERCENT_OF_AIR_TRAFFIC":length, 
        "LONGITUDE":long.values[0],"LATITUDE":lat.values[0]}, 
         ignore_index=True)

其他可能的解决方案:

out_df["ARR_DELAY_MEAN"] = pd.to_numeric(out_df["ARR_DELAY_MEAN"])
于 2020-04-23T03:08:16.807 回答