Есть ли способ получить ховертекст на линии между двумя парами lon, lat с помощью Scattergeo

#python #plotly #plotly.graph-objects

Вопрос:

Я рисую карту маршрута авиакомпании и хотел бы, чтобы на линии между пунктом отправления и пунктом назначения отображался текст сообщения. например, на изогнутой линии, соединяющей аэропорт Кеннеди с SFO, должен отображаться текст сообщения в строке «JFK-SFO/38 рейсов».

Ответ №1:

Я добавил текст при наведении курсора на основе образца из галереи графиков plotly. Справочную страницу можно найти здесь. К сожалению, установка положения текста при наведении курсора в центр строки по какой-то причине не сработала. Если вы переместите курсор мыши в сторону начальной точки аэропорта, текст будет отображаться в нужном формате.

 import plotly.graph_objects as go
import pandas as pd

df_flight_paths = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/2011_february_aa_flight_paths.csv')
df_flight_paths.head()

start_lat   start_lon   end_lat     end_lon     airline     airport1    airport2    cnt
0   32.895951   -97.037200  35.040222   -106.609194     AA  DFW     ABQ     444
1   41.979595   -87.904464  30.194533   -97.669872  AA  ORD     AUS     166
2   32.895951   -97.037200  41.938874   -72.683228  AA  DFW     BDL     162
3   18.439417   -66.001833  41.938874   -72.683228  AA  SJU     BDL     56
4   32.895951   -97.037200  33.562943   -86.753550  AA  DFW     BHM     168

fig = go.Figure()
flight_paths = []
for i in range(len(df_flight_paths)):
    fig.add_trace(
        go.Scattergeo(
            locationmode = 'USA-states',
            lon = [df_flight_paths['start_lon'][i], df_flight_paths['end_lon'][i]],
            lat = [df_flight_paths['start_lat'][i], df_flight_paths['end_lat'][i]],
            mode = 'lines',
            line = dict(width = 1,color = 'red'),
            hoverinfo='text',
            text=df_flight_paths.loc[i,'airport1']   '-'   df_flight_paths.loc[i,'airport2']  '/'   str(df_flight_paths.loc[i,'cnt'])   'flights',
            textposition='top center',
            opacity = float(df_flight_paths['cnt'][i]) / float(df_flight_paths['cnt'].max()),
        )
    )

    
fig.update_layout(
    title_text = 'Feb. 2011 American Airline flight paths<br>(Hover for airport names)',
    showlegend = False,
    width=1000,
    height=800,
    geo = dict(
        scope = 'north america',
        projection_type = 'azimuthal equal area',
        showland = True,
        landcolor = 'rgb(243, 243, 243)',
        countrycolor = 'rgb(204, 204, 204)',
    ),
)
fig.show()
 

введите описание изображения здесь

Комментарии:

1. Я хотел, чтобы положение текста было в центре строки, и я указал положение как широту и долготу, но это дало мне ошибку, поэтому я не нашел решения. Если это поможет вам, пожалуйста, примите это как правильное решение.

2. большое спасибо за ответ. Я попробовал это, и это работает нормально, за исключением того, что у меня нет возможности отличить другие источники, которые заканчиваются на DEN. например, ORD-DEN или JFK-DEN

3. Означает ли это, что аббревиатуры названий аэропортов дублируются? Если мой ответ вам полезен, пожалуйста, примите его как правильный ответ, нажав на галочку.

4. В сети у меня будут города, маршруты которых будут входить во многие места и выходить во многие места. До сих пор я не нашел способа определить маршруты, кроме одной конкретной городской пары. У вас может быть маршрут, идущий из аэропорта Кеннеди, но также один из DFW и один из SFO. Я хотел бы визуализировать все три и количество рейсов по каждому маршруту