#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. Я хотел бы визуализировать все три и количество рейсов по каждому маршруту