Посадить "муху" в последней точке графика 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()