Using pcolormesh for plotting an orbit data

2019-01-24 19:38发布

I am trying to map a dataset with associated latitude and longitude. The details of the data I am using are given below:

Variable   Type       Data/Info
-------------------------------
lat    ndarray    1826x960, type `float64`
lon    ndarray    1826x960, type `float64`
data   ndarray    1826x960, type `float64`

I have created then a basemap:

m = Basemap(projection='cyl', llcrnrlon=-180, urcrnrlon=180, llcrnrlat=-40, urcrnrlat=40, resolution='c')

Now, on the basemap created, I'd plot the above mentioned dataset using pcolormesh:

m.drawcoastlines()
m.drawcountries
x,y = m(lon,lat)
m.pcolormesh(x,y,data)
m.colorbar()
plt.show()

This gives following figure: Temp Brightness plot

But if I perform similar plot on a dataset (size 2691x960, same goes to lon and lat) covering whole londitude stretch(-180 to 180), I get a 'strange bar': strange bar

I am pretty sure that the strange bar occurs due to the overlapping of dataset. The same plot has been performed in matlab and it works pretty fine.

Please tell me what the problem is, what can be done to remove the bar, what are the other methods of plotting this kind of data in python.

2条回答
一夜七次
2楼-- · 2019-01-24 20:27

I haven't worked with anything to give me this problem, but it looks like a solution to a similar sounding problem was offered here using the mpl_toolkit.basemap.addcyclic method.

From the docs:

arrout, lonsout = addcyclic(arrin, lonsin) adds cyclic (wraparound) point in longitude to arrin and lonsin, assumes longitude is the right-most dimension of arrin.

查看更多
\"骚年 ilove
3楼-- · 2019-01-24 20:29

I think that you are running into a problem that I ran into a little bit ago. The problem here is that, when basemap tries to create the polygons, it uses an interpolation method that does not appear to handle the prime meridian correctly. Pixels that actually cross the prime maridian get interpolated into a polygon that extends around the globe.

The solution that I have used is to split the file into two masked arrays (or just mask the original array two different ways at different times), one with the eastern hemisphere masked, and one with the western hemisphere masked, then map them both to the same axes object.

edit: Another solution may be to have your longitude bounds go from -179.99 to 179.99 or something similar.

查看更多
登录 后发表回答