matplotlib バージョンをアップグレードした後、 を使用して空の凡例を取得できるようになりfiglegend()
ました。次のように空のボックスを表示するだけです。
これ とこれを見てきましたが、これまでのところどちらも役に立ちませんでした。
機能を使用しています
handles, labels = ax.get_legend_handles_labels()
これは以前はうまくいきました。他のすべては期待どおりに機能します。
凡例をどのように処理しているかを説明するために、コードから非常に簡略化された抜粋を含めました。
figprops = dict(figsize=(gsp.plotSizeX, gsp.plotSizeY), dpi=gsp.plotSizeDPI, facecolor='#FFFFFF', edgecolor='#000000', linewidth=0.5, frameon=True)
fig = plt.figure(**figprops)
fig.autofmt_xdate(bottom = 0.2, rotation = 30, ha='right')
canvas = FigureCanvas(fig)
legHandles = []
legText = []
font= FontProperties(size='xx-small')
hostPlots = []
pcount = len(gsp.subPlots)
pn = 111
if pcount > 1:
for i in range(1, pcount + 1):
pn = pcount * 100 + (1 * 10) + i
if i > 1:
hostPlots.append(host_subplot(pn, axes_class = AA.Axes, sharex = hostPlots[0]))
else:
hostPlots.append(host_subplot(pn, axes_class = AA.Axes))
else:
hostPlots.append(host_subplot(pn, axes_class = AA.Axes))
adjustprops = dict(bottom=0.10, right=0.70, wspace=0.2, hspace=0.2) # Subplot properties
fig.subplots_adjust(**adjustprops)
spno = 0
for sp in gsp.subPlots:
series = 0
axes_offset = 0
minTicks = sp.axes[0].minTicks
majTicks = sp.axes[0].majTicks
for a in sp.axes:
if series == 0:
ax = hostPlots[sp.plotNo-1]
p, = ax.plot_date(plotDate, y, 'k', linewidth = a.lineWidth, color = a.lineColor, label = a.axesLabel, linestyle = a.lineType)
h, l = ax.get_legend_handles_labels()
legHandles.append(h)
legText.append(a.axesLegend)
else: # if plotType = 'paraPlot' or plotType = 'subPlot'
ax = hostPlots[sp.plotNo-1].twinx()
p, = ax.plot_date(plotDate, y, 'k', linewidth = a.lineWidth, color = a.lineColor, label = a.axesLabel, linestyle = a.lineType)
h, l = ax.get_legend_handles_labels()
legHandles.append(h)
legText.append(a.axesLegend)
trans = transforms.blended_transform_factory(ax.transData, ax.transAxes)
rect = patches.Rectangle((dtn, 0), width=1, height=1,transform=trans, color='yellow', alpha=0.333)
ax.add_patch(rect)
series += 1
spno += 1
pl = hostPlots[spno-1]
box = pl.get_position()
pl.set_position([box.x0, box.y0 + box.height * 0.1, box.width, box.height * 0.85])
ax = hostPlots[0]
ax.set_title( gsp.plotName) #'Time series Data from CWMS Web Service')
if gsp.tightLayout:
plt.tight_layout(pad=0.4, w_pad=0.5, h_pad=1.0)
figlegend(legHandles, (legText,), 'upper center', bbox_to_anchor=(0.40, 0.07), prop=font, ncol=2)
とを使用してアップグレードした後、他の誰かが同じ問題を見たり修正しget_legend_handles_labels()
たりしましたfiglegend()
か?