Я бы убрал галочки и заменил текст на патчи . Вот краткий пример выполнения этой задачи:
import matplotlib.pyplot as plt
import matplotlib.patches as patches
# define where to put symbols vertically
TICKYPOS = -.6
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(range(10))
# set ticks where your images will be
ax.get_xaxis().set_ticks([2,4,6,8])
# remove tick labels
ax.get_xaxis().set_ticklabels([])
# add a series of patches to serve as tick labels
ax.add_patch(patches.Circle((2,TICKYPOS),radius=.2,
fill=True,clip_on=False))
ax.add_patch(patches.Circle((4,TICKYPOS),radius=.2,
fill=False,clip_on=False))
ax.add_patch(patches.Rectangle((6-.1,TICKYPOS-.05),.2,.2,
fill=True,clip_on=False))
ax.add_patch(patches.Rectangle((8-.1,TICKYPOS-.05),.2,.2,
fill=False,clip_on=False))
Это приводит к следующему рисунку:
Ключом для установки clip_on
является False
, иначе patches
вне осей не будет отображаться. Координаты и размеры (радиус, ширина, высота и т. Д.) Участков будут зависеть от того, где находятся ваши оси на рисунке. Например, если вы планируете делать это с помощью вспомогательных участков, вам нужно будет учитывать размещение исправлений, чтобы не перекрывать другие оси. Возможно, стоит потратить время на изучение Преобразований и определение позиций и размеров в другой единице (Оси, Рисунок или дисплей).
Если у вас есть определенные файлы изображений, которые вы хотите использовать для символов, вы можете использовать класс BboxImage
для создания художников, которые будут добавлены к осям вместо патчей. Например, я сделал простой значок с помощью следующего сценария:
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(1,1),dpi=400)
ax = fig.add_axes([0,0,1,1],frameon=False)
ax.set_axis_off()
ax.plot(range(10),linewidth=32)
ax.plot(range(9,-1,-1),linewidth=32)
fig.savefig('thumb.png')
производит это изображение:
Затем я создал BboxImage в том месте, где хочу метку галочки, и нужного размера:
lowerCorner = ax.transData.transform((.8,TICKYPOS-.2))
upperCorner = ax.transData.transform((1.2,TICKYPOS+.2))
bbox_image = BboxImage(Bbox([lowerCorner[0],
lowerCorner[1],
upperCorner[0],
upperCorner[1],
]),
norm = None,
origin=None,
clip_on=False,
)
Заметил, как я использовал преобразование transData
для преобразования единиц измерения в единицы измерения, которые требуются в определении Bbox
.
Теперь я читаю на изображении, используя подпрограмму imread
, и устанавливаю его результаты (массив NumPy) для данных bbox_image
и добавляю художника к осям:
bbox_image.set_data(imread('thumb.png'))
ax.add_artist(bbox_image)
Это приводит к обновленной фигуре:
Если вы используете изображения напрямую, обязательно импортируйте необходимые классы и методы:
from matplotlib.image import BboxImage,imread
from matplotlib.transforms import Bbox