Matplotlib - Как отключить отсечение растровых изображений imshow? - PullRequest
0 голосов
/ 23 октября 2019

Я строю фигуру с matplotlib, которая включает в себя как растровые изображения, нарисованные plt.imshow, так и другие графические объекты, такие как линейные графики.

Для линейных графиков, когда я устанавливаю clip_on в False, объекты выходят за пределы осей. Однако для imshow эта настройка, похоже, ничего не делает. Например, посмотрите, как логотип matplotlib обрезается в следующем примере. Как отключить отсечение растрового изображения, чтобы логотип matplotlib выходил за пределы осей?

Использование OffsetImage и AnnotationBbox вместо imshow позволяет размещать изображения вне осей, но имеет другие ограничения (Вв частности, размер / экстент указывается как произвольный коэффициент увеличения, а не как координаты данных.

clipping issue example

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.cbook import get_sample_data

fig = plt.figure(figsize=(10,5))
ax = plt.subplot(111)
plt.subplots_adjust(left=0.25, bottom=0.1, right=0.75, top=0.9, wspace=0, hspace=0)

# plot a line. When clip_on is set to False, the line is extended beyond the axes
ax.plot(np.linspace(0,2),np.sin(np.linspace(0,2)),clip_on=False)
plt.xlim([0,1])
plt.ylim([0,1])

# plot a bitmap. Although clip_on is set to False, it is clipped by the axes
logo = plt.imread(get_sample_data("logo2.png", asfileobj=False))
left,right, bottom, top=0.25,0.25+1.12,0.25,0.25+0.24
ax.imshow(X=logo,extent=(left, right, bottom, top),clip_on=False)

Версия Matplotlib: 3.1. 1, бэкэнд: Qt5Agg

...