Matplotlib Contour Clabel位置

时间:2010-05-07 20:21:57

标签: python matplotlib contour

我想在等高线图上控制matplotlib clabels的位置,但不使用clabel中的manual = True标志。例如,我想指定一个x坐标,并在通过该行的点处创建标签。我看到你可以使用get_position()来获取各个标签的位置,但我仍然坚持这一点。任何帮助将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:13)

是的,现在有办法控制标签位置! https://github.com/matplotlib/matplotlib/pull/642

plt.figure()
CS = plt.contour(X, Y, Z)
manual_locations = [(-1, -1.4), (-0.62, -0.7), (-2, 0.5), (1.7, 1.2), (2.0, 1.4), (2.4, 1.7)]
plt.clabel(CS, inline=1, fontsize=10, manual=manual_locations)

答案 1 :(得分:5)

不,matplotlib没有办法做到这一点。您应该使用默认位置或使用手动和使用鼠标进行完全交互。

您可能希望将其作为上游错误报告提交,以便他们改进算法。

有多种方法可以解决这个问题。第一个是以编程方式在轮廓图上放置文本。您将无法以这种方式可靠地删除文本下方的行。假设您有一个轮廓c,您可以在c.collections中找到轮廓线。对于每个轮廓线,调用get_paths并将文本放在该路径上。

另一种选择是替换手动放置的代码(在matplotlib.contour.BlockingContourLabeler中)或调整找到标签位置的代码(在matplotlib.contour.locate_label中),但这两个函数都非常密集。如果你能为locate_label找到一个有效的替代品,只需覆盖你的绘图宏中的旧方法

def your_locate_label(self, linecontour, labelwidth):
    # some magic
    pass

ar = np.array([[1,0], [0,1]]
c = matplotlib.contour(ar)
c.locate_label = your_locate_label

c.clabel()

顺便说一句,如果您使用ipython,您可以通过

轻松查看交互式会话中的功能来源
%psource c.clabel
如果用

定义,

或直接调用文件上的$EDITOR

%edit c.clabel