Here's a version that works for me with cartopy. It relies on np.roll(), which just got added in numpy 1.12, to correct the fact that the longitudes are arranged 180-360, 0-180, which seems to be causing problems. The other easy way to solve that is to plot the data in chunks.

import cartopy.crs as ccrs

import cartopy.feature as cfeat

import matplotlib.pyplot as plt

from netCDF4 import Dataset

import numpy as np

fh = Dataset(ncfile)

lats = fh.variables['latitude'][:]

lons = fh.variables['longitude'][:]

HTSGW_var = fh.variables['HTSGW_surface']

roll_to = -lons.argmin()

lons = np.roll(lons, roll_to)

data = np.roll(HTSGW_var[:].squeeze(), roll_to, axis=-1)

fig = plt.figure()

ax = fig.add_subplot(1, 1, 1, projection=ccrs.PlateCarree())

ax.set_global()

lon, lat = np.meshgrid(lons, lats)

cs = ax.pcolor(lon, lat, data)

# If roll not available

#cs = ax.pcolor(lon[:, :180], lat[:, :180], data[:, :180])

#cs = ax.pcolor(lon[:, 180:], lat[:, 180:], data[:, 180:])

# draw coastlines.

ax.coastlines()

ax.add_feature(cfeat.LAND)

plt.show()