我可以访问图实例fig = pylab.gcf()
。我知道在这个图中有一个图例,我可以通过myLegend = fig.gca().legend_
访问它。现在我要更改图例的属性。其中一些我可以通过setter访问,比如myLegend.set_frame_on(True)
。在
创建图例时,它接受多个关键字参数:
class matplotlib.legend.Legend(parent, handles, labels, loc=None, numpoints=None, markerscale=None, scatterpoints=None, scatteryoffsets=None, prop=None, fontsize=None, borderpad=None, labelspacing=None, handlelength=None, handleheight=None, handletextpad=None, borderaxespad=None, columnspacing=None, ncol=1, mode=None, fancybox=None, shadow=None, title=None, framealpha=None, bbox_to_anchor=None, bbox_transform=None, frameon=None, handler_map=None)
在创建图例后,如何修改图例中的所有关键字参数?在
其中一个问题是numpoints
(图例中的标记数,默认值为2)。下面是我想如何更改它的示例:
这显示了我想如何对其进行编程
import pylab
pylab.plot(0,0,'ro', label = 'one point')
pylab.legend(loc = "lower left")
# no modifications above this line
setattr(pylab.gcf().gca().legend_, 'numpoints',1)
pylab.show()
这显示了我想要它的样子
^{pr2}$我已经检查了源代码,有一个numpoint变量被改变了,但是上面的大小写没有更新到屏幕上。我错过了什么?在
我写了一个函数
modify_legend
,它在创建一个图例之后修改它。它基本上从已经创建的图例中读取所有参数,用您提供的键值参数更新它,并用所有可能的参数再次调用legend(...)
。在您的问题将通过以下方式解决:
以下是
^{pr2}$modify_legend
的代码:规范说明:
Legend
对象中读取,其他参数(如title
,fancybox
)需要一些“艺术性”。您可以检查^{prop
创建图例时,fontsize
参数的额外条件用于覆盖字体大小,因为prop
通常会覆盖{bbox_to_anchor
和{你在图例中看到的实际上是一个
Line2D
。在创建该行之后更改numpoints
不会更新该行,因此您必须获取Line2D
对象的句柄并手动删除其中一个点:必须使用
get_children()
链,因为matplotlib将行包装在多个水平和垂直包装层中。上面的代码片段应该足以让您大致了解情况,但是在实际应用程序中,获得句柄的更好方法是跟随the legend guide's hint on legend handlers并使用以某种方式存储行的自定义HandlerLine2D
。在可以使用正确的关键字/参数再次使用命令
pylab.legend
。这将修改现有的图例,而不是创建新的图例。下面是你的例子,稍作修改。在希望有帮助。在
相关问题 更多 >
编程相关推荐