Python clabel文本外部轮廓

时间:2017-07-24 14:16:01

标签: python matplotlib

如何沿着轮廓外部保持轮廓标签文字?注意 - 我不希望它与轮廓内联。以下MCVE。

from matplotlib import pyplot as plt
import numpy as np

Data=np.zeros((100,100))
Data[10:30,10:30] = 1
Data[60:80,60:80] = 1

f,ax1 = plt.subplots(1,1)

CS = ax1.contour(np.arange(0,100),np.arange(0,100),Data,[0,1])
ax1.clabel(CS, inline=False, fmt='%1.1f', fontsize=10)

plt.show()

检查了API后,我看不到任何内容(除了内联,手动点击或指定位置)。因此,在下图中,我希望在countour外面的标签略低。 enter image description here

1 个答案:

答案 0 :(得分:1)

您可以设置标签之后的垂直对齐创建它们,使其与顶部对齐到初始位置。

$Date$

此解决方案是半自动的。由于您不知道标签将放置在哪一侧,因此您不知道是否在此处使用clabels = ax.clabel( ... ) for label in clabels: label.set_va("top") "top"。此外,对于曲线,这根本没有帮助,您需要手动指定位置("bottom"

完整示例:

ax1.clabel(CS, ..., manual=list_of_locations)

enter image description here

<小时/> 有点破解,也可能与旋转标签一起使用(虽然我还没有对其进行过测试)可能是在标签前面引入了一个换行符。这也可以有效地将标签转移到底部。

from matplotlib import pyplot as plt
import numpy as np

Data=np.zeros((100,100))
Data[10:30,10:30] = 1
Data[60:80,60:80] = 1

f,ax1 = plt.subplots(1,1)

CS = ax1.contour(np.arange(0,100),np.arange(0,100),Data,[0,1])
cl = ax1.clabel(CS, inline=False, fmt='%1.1f', fontsize=10)
for l in cl:
    l.set_va("top")
plt.show()

enter image description here