You can put the colorbar into it's own axis and set the size and position of that axis directly. I've included an example below that adds another axis to your existing code. If this figure includes many plots and color bars you might want to add them all using gridspec.
import matplotlib.pylab as plt
from numpy.random import rand
data = rand(100,100)
mycm = plt.cm.Reds
fig = plt.figure()
ax4 = plt.subplot2grid((3, 4), (1, 3), colspan=1, rowspan=1)
heatmap = ax4.pcolor(data, cmap=mycm, edgecolors = 'none', picker=True)
box = ax4.get_position()
ax4.set_position([box.x0*1.05, box.y0, box.width, box.height])
# create color bar
axColor = plt.axes([box.x0*1.05 + box.width * 1.05, box.y0, 0.01, box.height])
plt.colorbar(heatmap, cax = axColor, orientation="vertical")
plt.show()