答案 0 :(得分:1)
在下面,我定义一个函数,该函数基于左下角,宽度和高度作为输入来创建花括号补丁。
然后可以将其与波段的宽度和位置及其名称列表一起循环使用。
请注意:作为第一步,这种方法仍然存在一些缺点:
plt.style.use('ggplot')
)后,它不再显示。我以为是因为ggplo样式及其z顺序使用了一些补丁,但到目前为止,我仍无法解决该问题。 代码:
def CurlyBrace(ll_corner=(0, 0), width=1, height=1):
import matplotlib.path as mpath
import matplotlib.patches as mpatches
import numpy as np
Path = mpath.Path
verts = np.array([(0, 0), (.5, 0), (.5, .2), (.5, .3), (.5, .5), (1, .5), (.5, .5), (.5, .7), (.5, .8), (.5, 1), (0, 1)])
verts[:, 0] *= width
verts[:, 1] *= height
verts[:, 0] += ll_corner[0]
verts[:, 1] += ll_corner[1]
cb_patch = mpatches.PathPatch(
Path(verts,
[Path.MOVETO, Path.CURVE3, Path.CURVE3, Path.LINETO, Path.CURVE3, Path.CURVE3, Path.CURVE3, Path.CURVE3, Path.LINETO, Path.CURVE3, Path.CURVE3]),
fc="none", clip_on=False, transform=ax.transData)
return cb_patch
import imageio
im = imageio.imread(pic_dir + 'sample_heatmap.png')
fig, ax = plt.subplots()
ax.imshow(im)
bands = np.array([0, 175, 320, 448, 585, 610, 815])
bnames = ['H3K4me3', 'H3K9me3', 'H3K27me3', 'H3K36me3', 'CTCF', 'H3K4me1']
for y, h, bn in zip(bands, np.diff(bands), bnames):
cb = CurlyBrace([990, y+h*0.025], 30, h*.95)
ax.add_patch(cb)
ax.text(1030, y+h/2, bn, va='center')
plt.tight_layout(rect=[0.05, 0, 0.85, 1])
结果: