fig = pl.figure(figsize=(8, 8))
ax1 = fig.add_subplot(1, 1, 1, projection=ccrs.Mercator())
cf = ax1.contourf(lon, lat, chl ,levels=np.linspace(0,5,50),cmap=cmaps.MPL_rainbow,
transform=ccrs.Mercator(),extend='both')
ax1.coastlines()
ax1.add_feature(cfeature.LAND)
ax1.set_extent([9,17,67.5,69.75])
lat_formatter = LatitudeFormatter(degree_symbol='')
lon_formatter = LongitudeFormatter(degree_symbol='')
ax1.gridlines(draw_labels={"left":"y","top":'x'},xformatter=lon_formatter,yformatter=lat_formatter)
cax = fig.add_axes([0.92,0.2,0.03,0.6])
fig.colorbar(cf, cax=cax, ticks=np.arange(0,6,5),shrink=0.7,orientation='vertical')
the figure turns out blank, but if I replace Mercator() with PlateCarree(), the figure is right.

So what goes wrong with contourf using ccrs.Mercator()?
To get correct result, the coordinate transformation must be correct. In your case I suspect that the location data is in latitude/longitude. If I am correct, your error is "transform=ccrs.Mercator()" specified in your code.
Here is a demo code that shows a proper approach:
Output: