В настоящее время я пытаюсь создать собственный обработчик легенды, создав патч-прокси (?) С помощью PatchCollections, а затем следуя http://matplotlib.org/users/legend_guide.html, чтобы создать пользовательский обработчик.Matplotlib PatchCollection to Legend
Однако я бегу в блокпост, пытаясь реализовать это в легенде. Аргументы для легенды берут патчи, но не patchcollections.
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab
import matplotlib.patches as mpatches
from matplotlib.path import Path
from matplotlib.collections import PatchCollection
fig = plt.figure()
ax = fig.add_subplot(111)
verts1 = [(0.,0.),(0.,1.),(1.,1.),(0.51,0.51),(0.,0.),(0.,0.),]
codes1 = [Path.MOVETO,Path.LINETO,Path.LINETO,Path.LINETO,Path.MOVETO,Path.CLOSEPOLY,]
path1 = Path(verts1,codes1)
patch1 = mpatches.PathPatch(path1,ls='dashed',ec='red',facecolor="none")
verts2 = [(0.49,0.49),(0.,0.),(1.,0.),(1.,1.),(0.5,0.5),(0.,0.),]
codes2 = [Path.MOVETO,Path.LINETO,Path.LINETO,Path.LINETO,Path.MOVETO,Path.CLOSEPOLY,]
path2 = Path(verts2,codes2)
patch2 = mpatches.PathPatch(path2,ls='solid',edgecolor='red', facecolor="none")
patch = PatchCollection([patch1,patch2],match_original=True)
ax.set_xlim(-2,2)
ax.set_ylim(-2,2)
ax.add_collection(patch)
Выше приведен код для визуализации обработчика. В основном прямоугольник с верхним треугольником в виде пунктирных линий и нижним в виде твердого
Использования,
plt.legend([patch],["hellocello"],loc='upper right')
Воссоздается ошибка. Есть ли обходной путь?
Привет, ваше последнее утверждение было SpotOn. Моя версия matplotlib 1.3.1 имела проблемы, и когда я обновился до 1.5.x (?), Она была решена. Большое спасибо! –
Отлично, что сейчас работает - если есть сомнения, обновите программное обеспечение :) –