19

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

4

2 回答 2

17

是的,现在有一种方法可以控制标签位置! 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)
于 2012-10-22T15:59:23.583 回答
5

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

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

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

另一种选择是替换手动放置的代码(in matplotlib.contour.BlockingContourLabeler)或调整找到标签位置的代码(in 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
于 2010-05-10T03:16:49.480 回答