нанесение на изображение, где степень еще не известна при построении изображения - PullRequest
0 голосов
/ 16 мая 2018

Я хочу создать фигуру, которая показывает фоновое изображение с наложенными точками рассеяния и линиями:

The curve fit probably isn't the best you've seen. That's ok.

Как видите, галочки на осях показывают координаты изображения. Разброс и линейный график также даны в координатах изображения - что нежелательно. Точечные и линейные графики все еще должны работать (и иметь смысл) без фонового изображения. Экстент неизвестен, поскольку этот показатель используется для определения экстента (в интерактивном режиме).

Вместо этого я хотел бы указать точечные и линейные графики в системе координат, показанной на фоновом изображении (единицы м³ / ч и м): преобразование из координат изображения в координаты «ось сверху» будет примерно ( 110 475) -> (0,10) и (530,190) -> (8,40).

В принципе, я вижу два способа сделать это:

  • указать экстент изображения после его добавления. Однако я нигде не вижу этого документально; Этот пример показывает, как это делается, когда экстент известен при вызове imshow(): График на фоне изображения в python
  • добавить оси поверх осей изображения с twinx и twin y, где пары x, x и y, y тесно связаны. Я видел только функции, которые позволяют мне указывать общую x или общую y-ось, но не обе.

1 Ответ

0 голосов
/ 16 мая 2018

Ограничение здесь, по-видимому, заключается в том, что «точечные и линейные графики все еще должны работать (и иметь смысл) без фонового изображения».Это, однако, не означает, что вы не можете использовать ключевое слово extent.

При добавлении изображения вы должны указать экстент.

plt.scatter(...)
plt.plot(...)
plt.imshow(..., extent = [...])

Вы также можете установить экстент позже, если это необходимо по какой-то причине, не объясненной в вопросе., т.е.

plt.scatter(...)
plt.plot(...)
im = plt.imshow(...)

im.set_extent([...])

Наконец, вы можете также решить удалить изображение и построить его снова;на этот раз с желаемой степенью,

plt.scatter(...)
plt.plot(...)
im = plt.imshow(...)

im.remove()
im = plt.imshow(..., extent=[...])
...