我正在matplotlib中绘制几个热图,如下所示。
这是我的循环:
with open(gene_peak) as f:
count = 1
for line in f:
np_array=[]
gene_peak = line.strip().split("\t")
gene_id = gene_peak[0]
peaks = gene_peak[1].split(",")
for peak in peaks:
np_array.append(enhancer_fc[peak])
data, pval = stats.spearmanr(np.transpose(np.array(np_array)))
plt.subplot(4,3,count+1)
# plt.title(gene_id)
plt.pcolor(data, cmap=plt.cm.OrRd, vmin=-1, vmax=1)
plt.gca().invert_yaxis()
plt.gca().set_aspect(aspect='equal', adjustable='box-forced')
plt.xticks([])
plt.yticks([])
print count
count += 1
plt.show()
我正在绘制不同尺寸的不同2D阵列的spearman相关性。
问题:
有相关值,因此它们的范围从-1到1.我想添加自定义colorbar(),使得高于0.4的值开始显示红色渐变,低于-0.4显示蓝色渐变,这样我显示只有大于0.4且小于-0.4的点。
另外,我想只绘制一个colorbar(),使图像看起来更干净。任何帮助将不胜感激,谢谢。
答案 0 :(得分:0)
您可以使用Matplotlib中的ListedColorMap
定义自己的离散色图。您可以使用其中一个图中的颜色条,并将其放置在适当的位置,以便直观地表示所有图形。以下是您给出的颜色的示例:
from matplotlib import colors
discrete_colors = [(255, 0, 20), (255, 70, 65), (255, 128, 110), (255, 181, 165), (64, 64, 64),
(0, 0, 0), (64, 64, 64), (124, 128, 217), (102, 107, 216), (69, 76, 215), (33, 33, 245)]
discrete_colors = [(r/255., g/255., b/255.) for r, g, b in discrete_colors]
my_colormap = colors.ListedColormap(discrete_colors)
subplot(211)
data = 2 * np.random.rand(10, 10) - 1.0
pcolor(data, cmap=my_colormap, vmin=-1, vmax=1)
subplot(212) # Some other plot
data = 2 * np.random.rand(10, 10) - 1.0
pc = pcolor(data, cmap=my_colormap, vmin=-1, vmax=1)
fig = gcf()
fig.subplots_adjust(right=0.70)
cax = fig.add_axes([0.80, 0.15, 0.05, 0.7])
fig.colorbar(pc, cax=cax)