Matplotlib соединяет точки рассеяния с двойной линией стрелки, которая может быть показана в mplleaflet - PullRequest
0 голосов
/ 14 февраля 2020

У меня есть график рассеяния, как показано ниже:

enter image description here

Я хочу соединить все синие точки с красной точкой с помощью линии со стрелкой с двумя головками, которая может показывается с использованием mplleaflet.

Диаграмма рассеяния, показанная в mplleaflet:

enter image description here

Ниже приведен код:

import matplotlib.pyplot as plt
import mplleaflet
import pandas as pd
import numpy as np

def leaflet_plot_stations():

    df = pd.read_csv('C:/Users/...') #load lon and lat

    # lon= df['Branch_Lon'].tolist()
    # lat = df['Branch_Lat'].tolist()
    lon = df['Hub_Lon'].tolist()
    lat = df['Hub_lat'].tolist()
    df['demand'] = 20
    df['size'] = df['demand'].apply(lambda x: x / 20 if x > 300 else x)
    print(df)
    size = df['size'].tolist()

    fig = plt.figure()
    ax1 = fig.add_subplot(111)
    ax1.scatter(lon, lat, c='blue', alpha=0.7, s=size, label='Local Hub')
    ax1.scatter(121.222824, 28.901852, c='r', alpha=0.7, s=120, label='Gateway Hub')

    mplleaflet.show()

leaflet_plot_stations()

1 Ответ

0 голосов
/ 14 февраля 2020

вы можете использовать annotate для создания стрелок, это немного проще, чем создавать FancyArrowPatch вручную. Тогда вам просто нужно перебрать свои точки, установить правильный пункт отправления / назначения

points_x, points_y = np.random.random(size=(2,25))
origin_x, origin_y = np.random.random(size=(2,))

fig, ax = plt.subplots()
ax.plot(points_x, points_y, 'o', color='blue', alpha=0.5)
ax.plot(origin_x, origin_y, 'o', color='red', alpha=0.5, ms=10)

for x,y in zip(points_x, points_y):
    ax.annotate('', xy=(origin_x, origin_y), xytext=(x,y), arrowprops=dict(arrowstyle='<|-|>'))

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...