如何定位标签文本

问题描述 投票:0回答:1

如何将轮廓标签文本保留在轮廓外部?注意 - 我不希望它与轮廓对齐。下面是 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 后,我看不到任何内容(除了内联、手动单击或指定位置)。因此,在下图中,我希望标签位于计数外侧稍低的位置。

python matplotlib label contour
1个回答
2
投票

您可以在创建标签后设置标签的垂直对齐方式,使其顶部与初始位置对齐。

clabels = ax.clabel( ... ) for label in clabels: label.set_va("top")

该解决方案是半自动的。因为您事先不知道标签将放置在哪一侧,所以您不知道此处是否使用

"top"

"bottom"
。另外,对于曲线,这根本没有帮助,你需要手动指定位置(
ax1.clabel(CS, ..., manual=list_of_locations)
)

完整示例:

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()

一个可能也适用于旋转标签的黑客(虽然我还没有测试过)可能是在标签前面引入换行符。这实际上也会将标签移到底部。

from matplotlib import pyplot as plt import matplotlib.ticker 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]) fmt = matplotlib.ticker.StrMethodFormatter("\n{x:1.1f}") cl = ax1.clabel(CS, inline=False, fmt=fmt, fontsize=10) plt.show()

© www.soinside.com 2019 - 2024. All rights reserved.