本文整理汇总了Python中matplotlib.transforms.Bbox.get_points方法的典型用法代码示例。如果您正苦于以下问题:Python Bbox.get_points方法的具体用法?Python Bbox.get_points怎么用?Python Bbox.get_points使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类matplotlib.transforms.Bbox
的用法示例。
在下文中一共展示了Bbox.get_points方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: apply_labels
# 需要导入模块: from matplotlib.transforms import Bbox [as 别名]
# 或者: from matplotlib.transforms.Bbox import get_points [as 别名]
#.........这里部分代码省略.........
txt_size = np.array(estimate_text_size_px(label, fig=ax.figure,
size=font_size_pts))
txt_size = txt_size.reshape([1, 2])
# this initial offset is needed to shift the center of the label
# to the data point
offset0 = -txt_size / 2
# now we can shift the label away from the data point by an amount
# equal to half the text width/height + the padding
offset1 = padding_px + txt_size / 2
for key, abs_px_arr in cand_map.items():
ioff = np.array(key, dtype='i').reshape(1, 2) - 1
total_offset = offset0 + ioff * offset1
# approx lower left corner of the text box in absolute pixels
abs_px_arr[:, :, 0] = root_px + total_offset
# approx upper right corner of the text box in absolute pixels
abs_px_arr[:, :, 1] = abs_px_arr[:, :, 0] + txt_size
# candidates_abs_px[i] has root @ root_px[i % n_candidates]
candidates_abs_px = np.concatenate([cand_map[c] for c in choices],
axis=0)
# find how many other things each candidate overlaps
n_overlaps = np.zeros_like(candidates_abs_px[:, 0, 0])
for k, candidate in enumerate(candidates_abs_px):
cand_bbox = Bbox(candidate.T)
# penalty for each time a box overlaps a path that's already
# on the plot
for ipth, path in enumerate(paths_px):
if path.intersects_bbox(cand_bbox, filled=is_filled[ipth]):
n_overlaps[k] += 1
# slightly larger penalty if we intersect a text box that we
# just added to the plot
for ipth, path in enumerate(bbox_paths_px):
if path.intersects_bbox(cand_bbox, filled=is_filled[ipth]):
n_overlaps[k] += 5
# big penalty if the candidate is out of the current view
if not (ax.bbox.contains(*cand_bbox.min) and
ax.bbox.contains(*cand_bbox.max)):
n_overlaps[k] += 100
# sort candidates by distance between center of text box and magnet
magnet_dist = np.linalg.norm(np.mean(candidates_abs_px, axis=-1)
- magnet_px, axis=1)
isorted = np.argsort(magnet_dist)
magnet_dist = np.array(magnet_dist[isorted])
candidates_abs_px = np.array(candidates_abs_px[isorted, :, :])
n_overlaps = np.array(n_overlaps[isorted])
root_dat = np.array(root_dat[isorted % n_candidates, :])
root_px = np.array(root_px[isorted % n_candidates, :])
# sort candidates so the ones with the fewest overlaps are first
# but do it with a stable algorithm so among the best candidates,
# choose the one closest to the magnet
sargs = np.argsort(n_overlaps, kind='mergesort')
# >>> debug >>>
if dax is not None:
for _candidate, n_overlap in zip(candidates_abs_px, n_overlaps):
_cand_bbox = Bbox(_candidate.T)
_x0 = _cand_bbox.get_points()[0]
_bbox_center = np.mean(_candidate, axis=-1)
_ray_x = [_bbox_center[0], magnet_px[0]]
_ray_y = [_bbox_center[1], magnet_px[1]]
dax.plot(_ray_x, _ray_y, '-', alpha=0.3, color='grey')
_rect = mpatches.Rectangle(_x0, _cand_bbox.width,
_cand_bbox.height, fill=False)
dax.add_patch(_rect)
plt.text(_x0[0], _x0[1], label, color='gray')
plt.text(_x0[0], _x0[1], '{0}'.format(n_overlap))
# <<< debug <<<
# pick winning candidate and add its bounding box to this list of
# paths to avoid
winner_abs_px = candidates_abs_px[sargs[0], :, :]
xy_root_px = root_px[sargs[0], :]
xy_root_dat = np.array(root_dat[sargs[0], :])
xy_txt_offset = np.array(winner_abs_px[:, 0] - xy_root_px)
corners = Bbox(winner_abs_px.T).corners()[(0, 1, 3, 2), :]
bbox_paths_px += [Path(corners)]
# a = plt.annotate(label, xy=xy_root_dat, xycoords='data',
# xytext=xy_txt_offset, textcoords="offset pixels",
# color=color, **kwargs)
a = ax.annotate(label, xy=xy_root_dat, xycoords='data',
xytext=xy_txt_offset, textcoords="offset pixels",
color=color, **kwargs)
annotations.append(a)
if rand_state is not None:
np.random.set_state(rand_state)
return annotations