2012-11-28 28 views
15

Tôi đang âm mưu dữ liệu trên bản đồ sử dụng mã này:Loại bỏ mép trắng trong cốt truyện pcolor/basemap Matplotlib

import numpy as np 
import matplotlib as mpl 
import matplotlib.pyplot as plt 
import matplotlib.cm as cm 
from mpl_toolkits.basemap import Basemap 
from matplotlib.patches import Polygon 
from scipy.io import netcdf 

ncfile = netcdf.netcdf_file(myfile.nc,'r') 
lon = ncfile.variables['longitude'][:] 
lat = ncfile.variables['latitude'][:] 
data = ncfile.variables['mydata'][:] 
ncfile.close() 

m = Basemap(projection='nplaea', boundinglat=40, lon_0=270) 
m.drawcoastlines(linewidth=.6, zorder=2) 
m.drawparallels(np.arange(-80.,81.,20.), zorder=1) 
m.drawmeridians(np.arange(-180.,181.,20.), zorder=1) 
cNorm = mpl.colors.Normalize(vmin=0, vmax=np.nanmax(data)) 
cmap = plt.get_cmap('jet') 
lons, lats = np.meshgrid(lon, lat) 
x, y = m(lons, lats) 
datamap = m.pcolor(x, y, data, zorder=0) 
datamap.set_norm(cNorm) 
plt.colorbar(datamap, cmap=cmap, norm=cNorm, shrink=0.5) 
plt.savefig('figures/map_polar.png', dpi=150, bbox_inches='tight', pad_inches=0.4) 

Điều này dẫn đến hình ảnh này: enter image description here

Như bạn có thể thấy, có khoảng trống trắng giữa các ô lưới. Làm thế nào tôi có thể loại bỏ chúng?

+0

bạn có thể đặt tệp dữ liệu lên bất kỳ nơi nào không? – tacaswell

+0

Thật không may, không, nhưng nó thường xuyên khoảng cách dữ liệu gridded .. – HyperCube

+0

Đối với bất cứ điều gì nó có giá trị, tôi không thể sao chép vấn đề của bạn bằng cách sử dụng ngẫu nhiên tạo ra (hoặc liên tục) dữ liệu ... Phiên bản của matplotlib bạn đang sử dụng? Có lẽ đó là một lỗi đã được sửa? Ngoài ra, 'pcolormesh' sẽ nhanh hơn trong trường hợp này. Hãy thử sử dụng nó thay vì 'pcolor'. Tôi nghi ngờ (?) Nó sẽ sửa chữa vấn đề của bạn, nhưng nó phải nhanh hơn, bất kể. –

Trả lời

2

Tôi đã gặp vấn đề tương tự một lần. Rất có thể sự cố là ở số longitude. Đảm bảo rằng 0360 đều tồn tại trong đầu vào. Nếu không, hãy thêm chúng theo cách thủ công và thay đổi thành mydata sao cho chúng có cùng hình dạng.

+0

Tôi đang sử dụng một phạm vi -180, 180. Điều đó cũng có tác dụng?Thật vậy, 180 đã bị thiếu, vì vậy tôi đã thêm nó và sao chép cột cuối cùng của dữ liệu vào dữ liệu một lần nữa. Tuy nhiên, các sọc trắng vẫn còn. – HyperCube

3

Tôi biết đây là một câu hỏi cũ nhưng tôi nghĩ tôi sẽ thêm giải pháp cho vấn đề này. Tôi tìm thấy câu hỏi của bạn khi tôi đang gặp vấn đề chính xác giống như bạn, tức là một dòng trắng trong cốt truyện của tôi và một mạng lưới đi từ -180 đến 180. Các giải pháp đối với tôi là để sử dụng chức năng bản đồ cơ sở addcyclic

from mpl_toolkits.basemap import Basemap, shiftgrid, addcyclic 
SSTcyclic, lonCMIP5cyclic = addcyclic(SST, lonCMIP5) 

Điều này giải quyết được vấn đề của tôi. Chúc mừng, Trond

2

Dường như với tôi như bài đăng gốc không thực sự hỏi về vùng màu trắng giữa các số 0360 độ.

Tôi nghĩ rằng OP đang nói về ranh giới giữa mỗi vuông màu mà sẽ phù hợp với this bug:

Dường như savig một âm mưu pcolor sang một định dạng pdf luôn bao gồm gridlines, mà không phải là đúng đối với các định dạng đầu ra khác như png

đây là những gì các nhà phát triển nói về vấn đề này:

tôi thấy gridlines trong tạo ra hình ảnh trong gs, xpdf Preview.app nhưng không phải là trong Adobe Reader. Khi tôi phóng to Xem trước, các đường nhảy xung quanh một chút, và luôn có cùng chiều rộng trên màn hình bất kể mức thu phóng.

Điều được rút ra trong ví dụ này là rất nhiều đa giác, sao cho các đa giác liền kề cạnh nhau có cùng tọa độ chính xác. Mã điền vào bên trong của mỗi đa giác và dường như một số thuật toán hiển thị để lại một đường có chiều rộng tối thiểu giữa các đa giác.

Vì vậy, đây là vấn đề với trình xem PDF, không phải với pcolor hoặc bất kỳ khía cạnh nào khác của matplotlib.

Các vấn đề liên quan