0

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()か?

4

1 に答える 1

0

これは期待どおりに動作します。

ax = gca()
plot(range(15), label='test')
h, l = ax.get_legend_handles_labels()
figlegend(h, l, 'upper center')

マスターで。あなたのコードで他の何かが壊れていると思います

 legText.append(a.axesLegend)

その行

于 2013-08-14T01:18:18.337 に答える