簡體   English   中英

消除Matplotlib / Basemap pcolor圖中的白邊

[英]Eliminate white edges in Matplotlib/Basemap pcolor plot

我正在使用以下代碼在地圖上繪制數據:

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)

這導致此圖像: 在此輸入圖像描述

如您所見,網格單元之間存在白色間隙。 我怎么能擺脫他們?

我知道這是一個老問題,但我想我會為這個問題添加我的解決方案。 當我遇到與你的問題完全相同的問題時,我發現了你的問題,即我的情節中的白線和從-180到180的網格。我的解決方案是使用底圖函數addcyclic

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

這解決了我的問題。 干杯,特隆德

我曾經遇到過同樣的問題。 這個問題很可能是longitude問題。 確保輸入中存在0360 如果沒有,請手動添加它們,並相應地更改mydata ,使它們具有相同的形狀。

在我看來,原來的帖子實際上並沒有詢問0360度之間的白色區域。

我認為OP正在討論每個顏色方塊之間的線條,這與這個bug是一致的:

看來,pdf格式的pcolor圖總是包含網格線,但對於像png這樣的其他輸出格式則不然

以下是開發人員對此問題的看法:

我在gs,xpdf Preview.app中看到結果圖像中的網格線,但在Adobe Reader中沒有。 當我放大預覽時,線條會跳躍一點,並且無論縮放級別如何,屏幕上的寬度始終相同。

在這個例子中繪制的是很多多邊形,因此相鄰的多邊形共享一個具有完全相同坐標的邊。 代碼填充每個多邊形的內部,顯然一些渲染算法在多邊形之間留下最小寬度線。

所以這是PDF查看器的問題,而不是pcolormatplotlib任何其他方面。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM