Посадить "муху" в последней точке графика matplotlib.pyplot

Задача - в последней точке графика изобразить "муху" - разместить небольшое растровое изображение path_loo. Пока не получается.. Мой график (напр, sin(x)) рисуется на фоновом изображении path_background:

import matplotlib.pyplot as plt
import numpy as np

def create_graph(path_background: str, path_loo: str, path_out: str) -> np.ndarray:

    img = plt.imread(path_background)
    img2= plt.imread(path_loo)
    fig, ax = plt.subplots(figsize=(10, 5))
    ax.imshow(img, extent=[0 , 10, -1 , 1])
    fig, ax2 = plt.subplots(figsize=(1, 1))
    x = np.arange( 0, 10, 0.1)
    y = np.sin(x)
    print(x[-1],y[-1])
    ax.plot(x, y, '-', color = 'seagreen')

    ax2.imshow(img2, extent=[ x[-1],y[-1] , x[-1],y[-1]])
    plt.subplots_adjust(left=0.0, right=1.0, bottom=0.0, top=1.0)
    ax.axes.get_xaxis().set_visible(False)
    ax.axes.get_yaxis().set_visible(False)

    plt.savefig(path_out, dpi=100)
    plt.show()
    return x,y

create_graph('map.jpg','223.jpg','save_fig')

Ответы (1 шт):

Автор решения: SdxSdySdz

Как сделать так, чтобы муха рисовалась поверх графика, я так и не разобрался. В любом случае, ваша основная ошибка в том, что в параметр extent должны передаваться сначала две икс координаты, потом две игрек координаты (у вас они чередуются).

И ещё не совсем понятно зачем вам ax2, поэтому я его убрал.

import matplotlib.pyplot as plt
import numpy as np

def create_graph(path_background: str, path_loo: str, path_out: str) -> np.ndarray:
    img2_radius = 0.25

    img = plt.imread(path_background)
    img2 = plt.imread(path_loo)


    fig, ax = plt.subplots(figsize=(10, 5))

    ax.imshow(img, extent=[0, 10, -1, 1])
    x = np.arange(0, 10, 0.1)
    y = np.sin(x)
    ax.imshow(img2, extent=[
        x[-1] - img2_radius, x[-1] + img2_radius,
        y[-1] - img2_radius, y[-1] + img2_radius
    ])


    ax.plot(x, y, '-', color='seagreen')


    plt.subplots_adjust(left=0.0, right=1.0, bottom=0.0, top=1.0)
    ax.axes.get_xaxis().set_visible(False)
    ax.axes.get_yaxis().set_visible(False)

    plt.savefig(path_out, dpi=100)
    plt.show()
    return x, y

def main():
    create_graph('map.jpg', '223.jpg', 'save_fig')


if __name__ == '__main__':
    main()
→ Ссылка