我可以访问figure实例fig=pylab。gcf()
。我知道在这个图中有一个图例,我可以通过myLegend=fig.gca()访问它。图例
。现在我想更改图例的属性。其中一些我可以通过设置器访问,比如myLegend。将帧设置为on(真)
。
创建图例时,它接受多个关键字参数:
类matplotlib。传奇传奇(父项、句柄、标签、loc=None、numpoints=None、markerscale=None、scatterpoints=None、scatteryoffsets=None、prop=None、fontsize=None、borderpad=None、labelspace=None、handlelight=None、handleextpad=None、borderaxespad=None、columnspacing=None、ncol=1、mode=None、fancybox=None、shadow=None、title=None、framealpha=None、bb)ox\u to\u anchor=None、bbox\u transform=None、frameon=None、handler\u 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()
这显示了我希望它看起来是什么样子
import pylab
pylab.plot(0,0,'ro', label = 'one point')
pylab.legend(numpoints = 1, loc = "lower left")
pylab.show()
我已经检查了源代码,有一个numpoint变量已更改,但大写字母未更新到屏幕。我错过了什么?
您在图例中看到的实际上是一个Line2D
。创建该行后更改numpoints
不会更新所述行,因此您必须获得Line2D
对象的句柄,并手动删除其中一个点:
import pylab
pylab.plot(0,0,'ro', label = 'one point')
legend = pylab.legend(loc = "lower left")
markers = legend.get_children()[0].get_children()[1].get_children()[0].get_children()[0].get_children()[0].get_children()[1]
markers.set_data(map(pylab.mean, markers.get_data()))
pylab.show()
需要get_children()。上面的代码片段应该足以让您大致了解情况,但在实际应用程序中,获取句柄的更好方法是遵循图例指南中有关图例处理程序的提示,并使用定制的
HandlerLine2D
,以某种方式存储该行。
您可以使用命令pylab。图例
再次使用正确的关键字/参数。这将修改现有图例,而不是创建新图例。下面你会发现你的例子,稍微修改了一下。
import pylab
pylab.plot(0,0,'ro', label = 'one point')
pylab.legend(loc = "lower left")
# Change the number of markers shown in the legend
pylab.legend(numpoints = 1, loc = "lower left")
pylab.show()
希望能有帮助。
我写了一个函数modify_legend
,它在创建图例后修改图例。它基本上从已经创建的图例中读取所有参数,用您提供的键值参数更新它,并再次用所有可能的参数调用传奇(...)
。
然后,您的问题将通过以下方式解决:
import pylab
pylab.plot(0,0,'ro', label = 'one point')
pylab.legend(loc = "lower left")
modify_legend(numpoints = 1)
pylab.show()
以下是修改图例的代码:
def modify_legend(**kwargs):
import matplotlib as mpl
l = mpl.pyplot.gca().legend_
defaults = dict(
loc = l._loc,
numpoints = l.numpoints,
markerscale = l.markerscale,
scatterpoints = l.scatterpoints,
scatteryoffsets = l._scatteryoffsets,
prop = l.prop,
# fontsize = None,
borderpad = l.borderpad,
labelspacing = l.labelspacing,
handlelength = l.handlelength,
handleheight = l.handleheight,
handletextpad = l.handletextpad,
borderaxespad = l.borderaxespad,
columnspacing = l.columnspacing,
ncol = l._ncol,
mode = l._mode,
fancybox = type(l.legendPatch.get_boxstyle())==mpl.patches.BoxStyle.Round,
shadow = l.shadow,
title = l.get_title().get_text() if l._legend_title_box.get_visible() else None,
framealpha = l.get_frame().get_alpha(),
bbox_to_anchor = l.get_bbox_to_anchor()._bbox,
bbox_transform = l.get_bbox_to_anchor()._transform,
frameon = l._drawFrame,
handler_map = l._custom_handler_map,
)
if "fontsize" in kwargs and "prop" not in kwargs:
defaults["prop"].set_size(kwargs["fontsize"])
mpl.pyplot.legend(**dict(defaults.items() + kwargs.items()))
代码注释:
一些参数可以很容易地从图例
对象中读取,其他参数(如标题
,fancybox
)需要一些“艺术性”。您可以检查matplotlib。传奇传说__初始化以查看它是如何完成的以及为什么完成的
当最初使用prop
创建图例时,fontsize
参数上的附加条件用于覆盖字体大小,因为prop
通常覆盖fontsize
我没有测试所有的案例,因为我没有太多的时间(特别是bbox\u-to\u锚定
和bbox\u转换
-参数),所以请尝试并改进代码:)
我目前使用matplotlib以以下方式生成图例: 这在某种程度上是可行的,见1。但我在我的传奇中复制了信息。 我宁愿把传说分开。所以我有不同颜色的线对应于时间t,一条法线作为我的解析解,一个点作为我的模拟结果。 诸如此类 --(红线)t=25 --(蓝线)t=50 --(绿线)t=500 模拟 --解析解 现在有人知道我如何用matplotlib实现这一点了吗?
问题内容: 我将一些matlpotlib函数集成到了一些django-celery任务中。 每次调用任务时,都会将更多RAM专用于python。不久之后,python占用了所有RAM。 问题: 如何释放此内存? 更新2-第二种解决方案: 我问过类似的问题,特别是有关内存锁定matplotlib错误的时候,但是我有一个很好的回答这个问题,以及如果使用多进程运行在单独的进程中绘图功能,其内存会自动释放
问题内容: 我正在matplotlib中的轴对象上绘制图例,但是声称将其放置在智能位置的默认定位似乎不起作用。理想情况下,我希望图例可由用户拖动。如何才能做到这一点? 问题答案: 注意:现在已内置到matplotlib中 将按预期工作 好吧,我发现解决方案的点点滴滴分散在邮件列表中。我提出了一个很好的模块化代码块,您可以插入并使用…在这里: …以及您的代码中… 我给Matplotlib-users
我有一个有着多个传奇的人物,我希望能够给他们贴上标签。我想在图例上放一个标题/标签,如下所示。这不是这个答案的复制品,这个答案只说明了如何在数字上放置一个图例。 我已经检查了图例指南,但找不到任何关于如何做到这一点的信息。 同样,请不要关闭这个问题(就像这个问题一样),它不是上面链接的答案的副本。该答案没有提供任何有关为图例添加标签/标题的信息。
本文向大家介绍Python的matplotlib绘图如何修改背景颜色的实现,包括了Python的matplotlib绘图如何修改背景颜色的实现的使用技巧和注意事项,需要的朋友参考一下 在主图中背景颜色不知道怎么改,plt.plot()中没有axisbg参数。 但是子图可以对plt.subplot的参数做修改,下面是对子图的背景颜色修改代码 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大
问题内容: 我在META-INF /文件夹中有一个persistence.xml: 在Java代码中,我从该persistence.xml创建实体管理器facotry 但是我只想动态更改jdbc url / user / password以进行测试,我的计划是将这些参数保存在配置文件中,并根据需要读取它们,所以有没有一种方法可以在我从持久性创建了objectmanagerfactory之后更新它们