Center-align tick labels of matplotlib heatmap
22,479
The example below shows that the alignment setting is not too difficult. It is possible that you have some interfering commands before the ht_ax.set_xticklabels
call; and in particular, manipulating an axis before the call to imshow
rather than after might not have the desired response, since imshow
, like many/most plotting commands, includes a basic configuration of the axes.
Can you strip back much of your configuration?
# some random data to show
I = np.random.rand(25, 35)
# and some labels that are quite long (so differences are visible)
labels = range(0, 30000, 5000)
fig, ax = plt.subplots(3, 1, num=1)
ha = 'center'
ax[0].imshow(I, interpolation='none',aspect='auto')
ax[0].set_xticklabels(labels, rotation=45, ha='left', minor=False)
ax[1].imshow(I, interpolation='none',aspect='auto')
ax[1].set_xticklabels(labels, rotation=45, ha='center', minor=False)
ax[2].imshow(I, interpolation='none',aspect='auto')
ax[2].set_xticklabels(labels, rotation=45, ha='right', minor=False)
plt.subplots_adjust(hspace=0.5)
plt.show()
Author by
user2998764
Updated on April 22, 2020Comments
-
user2998764 about 4 years
I have plotted a heat map with imshow, but I can't get the x tick labels to be center aligned even though I made
ha='center'
.Here is my code:
font= mpl.rcParams['font.size']=8.0 lineWidth= mpl.rcParams['lines.linewidth']= 1.0 absolute_max=abs(max_num) absolute_min=abs(min_num) cb_boundary=max(absolute_max,absolute_min) tree=Phylo.read("reorder.nwk","newick") a=1.0 cdict = {'red': ((0.0, 0.0, 0.0), (0.25,0.0, 0.0), (0.5, 0.8, 1.0), (0.75,1.0, 1.0), (1.0, 0.4, 1.0)), 'green': ((0.0, 0.0, 0.0), (0.25,0.0, 0.0), (0.5, 0.9, 0.9), (0.75,0.0, 0.0), (1.0, 0.0, 0.0)), 'blue': ((0.0, 0.0, 0.4), (0.25,1.0, 1.0), (0.5, 1.0, 0.8), (0.75,0.0, 0.0), (1.0, 0.0, 0.0)) } plt.register_cmap(name='BlueRed', data=cdict) norm = mpl.colors.Normalize(vmin=-3.0, vmax=3.0) cmap = plt.get_cmap('BlueRed') masked_array = np.ma.masked_where(full_len==np.NaN,full_len) cmap.set_bad('green',1.0) fig= plt.figure(figsize=(19,10)) rect_phyl = [-0.7, 0.3, 0.2, 0.6] rect_ht = [-0.5,0.3 , 0.3, 0.6] phyl_ax = plt.axes(rect_phyl,frameon=True) ht_ax = plt.axes(rect_ht) ##fig.suptitle(file_handle.replace('_del.csv',''),fontsize=22) phyl_ax.add_patch(Rectangle((8.1,17.6),6.5,16.9,edgecolor="brown", fill=False)) phyl_ax.add_patch(Rectangle((8.1,10.4),6.5,7.0,edgecolor="magenta", fill=False)) phyl_ax.add_patch(Rectangle((8.1,7.6),6.5,2.6,edgecolor="black", fill=False)) phyl_ax.add_patch(Rectangle((8.1,0.3),6.5,6.9,edgecolor="turquoise", fill=False)) fig.subplots_adjust(hspace=0,wspace=0) Phylo.draw(tree, axes=phyl_ax, do_show=False,show_confidence=False) ht_ax.set_xlim(0,34) ht_ax.set_ylim(0,34) phyl_ax.set_xlim(0,15) divider = make_axes_locatable(ht_ax) cbax = divider.append_axes("right", size="5%", pad=0.10) phyl_ax.set(xlabel='',ylabel='') plt.setp(phyl_ax.get_xticklabels(),visible=False) plt.setp(phyl_ax.get_yticklabels(),visible=False) plt.setp(ht_ax.get_xticklabels(),visible=True) plt.setp(ht_ax.get_yticklabels(),visible=False) plt.setp(phyl_ax.get_xticklines(),visible=False) plt.setp(phyl_ax.get_yticklines(),visible=False) plt.setp(ht_ax.get_xticklines(),visible=False) plt.setp(ht_ax.get_yticklines(),visible=False) img = ht_ax.imshow(masked_array, cmap=cmap, interpolation='none',aspect='auto',vmin=-cb_boundary,vmax=cb_boundary,extent=[34,0,34,0],origin='lower') xticks=range(34) ht_ax.xaxis.set_ticks(xticks) ht_ax.yaxis.set_ticks(xticks) ht_ax.grid(True, which='both') ha = ['right', 'center', 'left'] ht_ax.set_xticklabels(txtnames,rotation=45,fontsize=8,ha=ha[1],minor=False) plt.colorbar(img, cax=cbax) heatmap_file=fig.savefig('/home/Desktop/heatmap/'+file_handle.replace('.csv','')+'.pdf',bbox_inches='tight',dpi=150)
Can someone help me find the error?