简体   繁体   English

将子图与颜色栏对齐

[英]Align subplot with colorbar

I am trying to share the x-axis of a imshow that have to be square and a classique plot: 我正在尝试共享必须是正方形和经典情节的imshow的x轴:

  1. the imshow has to be square 展示必须是方形的
  2. with a colorbar 带颜色条
  3. the plot bellow should share the same axis (or at least look like align with the imshow) 波纹管应该共享相同的轴(或至少看起来与imshow对齐)

I spent two days on it, and now I am crazy. 我花了两天时间,现在我疯了。 Did someone know how to align them ? 有人知道如何对齐它们吗?

顶部显示方形正方形,带有一个色条,下面是一个绘图,该绘图应共享相同的轴

The code used to produce the image is bellow. 产生图像的代码如下。

def myplot( Nbin=20 ):

X = np.random.rand(1000)
Y = np.random.rand(1000)
h2, yh2, xh2 = np.histogram2d( Y, X, bins=[Nbin,Nbin] )
h1, xh1 = np.histogram( X, bins=Nbin )
######################################
######################################
fig = plt.figure(  )
gs = gridspec.GridSpec( 3, 2 )
######################################
######################################
ax1 = plt.subplot( gs[:-1,:] )
im = plt.imshow( h2, interpolation='nearest', origin='lower',
                 extent=[xh2[0],xh2[-1],yh2[0],yh2[-1]] )
cb = plt.colorbar( im, ax=ax1 )
plt.xlim( xh1[0], xh1[-1] )
plt.ylim( xh1[0], xh1[-1] )
ax1.tick_params( axis='x', which='both', bottom='on', top='on', labelbottom='off' )
######################################
######################################
ax2 = plt.subplot( gs[-1,:] )
plt.plot( xh1[:-1] + np.diff(xh1)/2., h1 )
plt.xlim( xh1[0], xh1[-1] )
cm = plt.cm.Blues
cb2 = plt.colorbar( ax=ax2 )
ax2.tick_params( axis='x', which='both', bottom='on', top='on', labelbottom='on' )
######################################
######################################
fig.tight_layout()
fig.subplots_adjust(hspace=0.05)
cb2.ax.set_visible(False)

I could imagine that the easiest way to have the second axes directly below the image is to use mpl_toolkits.axes_grid1.make_axes_locatable . 我可以想象,将第二个轴直接放置在图像下方的最简单方法是使用mpl_toolkits.axes_grid1.make_axes_locatable This allows to shrink the image at the expense of the newly created subplot and can equally be used to position the colorbar. 这允许以新创建的子图为代价来缩小图像,并且同样可以用于放置颜色条。

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable

Nbin=20

X = np.random.rand(1000)
Y = np.random.rand(1000)
h2, yh2, xh2 = np.histogram2d( Y, X, bins=[Nbin,Nbin] )
h1, xh1 = np.histogram( X, bins=Nbin )

fig = plt.figure(  )


ax1 = plt.subplot(111)
im = ax1.imshow( h2, interpolation='nearest', origin='lower',
                 extent=[xh2[0],xh2[-1],yh2[0],yh2[-1]] )

plt.xlim( xh1[0], xh1[-1] )
plt.ylim( xh1[0], xh1[-1] )
ax1.tick_params( axis='x', which='both', bottom='on', top='on', labelbottom='off' )


divider = make_axes_locatable(ax1)
ax2 = divider.append_axes("bottom", size="50%", pad=0.08)
cax = divider.append_axes("right", size="5%", pad=0.08)
cb = plt.colorbar( im, ax=ax1, cax=cax )

#ax2 = plt.subplot( gs[-1,:] )  # , sharex=ax1
ax2.plot( xh1[:-1] + np.diff(xh1)/2., h1 )
ax2.set_xlim( xh1[0], xh1[-1] )
cm = plt.cm.Blues

ax2.tick_params( axis='x', which='both', bottom='on', top='on', labelbottom='on' )

plt.show()

在此处输入图片说明

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM