ラベルを一時的に必要としないパスをcsオブジェクトから削除するには、clabel()を呼び出して、削除されたpathesをcsオブジェクトに復元してから削除します。
ここは例です。すべてのレベルのコレクションについて、最長の道を維持し、他のすべてのコレクションを削除します。 path_length()は、パスの長さを計算します。ここで
import pylab as pl
import numpy as np
x, y = np.mgrid[-2:1:100j, -1:1:100j]
z = np.sqrt(x*x+y*y)
cs = pl.contour(x, y, z, linewidths=2)
def path_length(path):
v = path.vertices
dv = np.diff(v, axis=0)
return np.sum(np.sqrt(np.sum(dv**2, axis=-1)))
# remain the longest path and remove all others
deleted_path = []
for c in cs.collections:
paths = c.get_paths()
if len(paths) > 1:
paths.sort(key=path_length, reverse=True)
for p in paths[1:]:
deleted_path.append((c, p))
del paths[1:]
# create labels
r = pl.clabel(cs, cs.levels, inline=True, fontsize=10)
# restore all removed paths
for c, p in deleted_path:
c.get_paths().append(p)
pl.show()
は、あなたが見ることができるように、グリーン&茶色のラインのための唯一つのラベルがあり、その結果です。
あなたのプロットから、パス長を判断として使用できると思います。矩形の長さが外側の曲線よりも大きい場合は、削除するパスを特定する他の方法を見つける必要があります。
第2セットのラベルはどこですか?彼らがどこにいるのかわかりません。 – fraxel
@fraxel彼らはすべて中央の四角形の左側に沿ってお互いの上に置かれています。 – pafcu