控制全域pcolormesh细胞的分辨率

2024-05-15 10:33:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我不确定这是Cartopy问题还是Matplotlib问题,所以如果这更适合Matplotlib,我很抱歉

我正在从NCL(NCAR命令语言https://www.ncl.ucar.edu/)转换到Python。以前,我使用NCL以“CellFill”(https://www.ncl.ucar.edu/Document/Graphics/Resources/cn.shtml#cnFillMode)的方法绘制等高线。在Python中,我使用pcolormesh渲染水平网格间距为3-km的网格数据集。在NCL中,无论我是绘制全域还是区域缩放,使用PNG输出,结果图像的分辨率似乎是一致的。然而,在Python中,如果我使用带有区域缩放的pcolormesh,它看起来与我的NCL绘图相同,但是如果我尝试绘制整个域,它看起来就不同了

我已经追踪到了数字分辨率。然而,在Python中的完整域视图中,我配置了我的图形设置,这会导致某些区域中的3-km单元变得“一起模糊”,使其看起来,就好像整个区域是某个轮廓值,而实际上,在这两者之间没有值的区域

以下是pcolormesh的CONUS示例: enter image description here

以下是NCL的完整CONUS版本: enter image description here

有几个值得注意的区域,但一个明显的区域是NM/AZ区域。如果我在这个区域中对Python和NCL进行非常近的放大,得到的图像看起来是相同的。但是在CONUS视图中,这一区域的阴影看起来比Python版本中实际应该有的要多得多

crs = ccrs.PlateCarree() # Lat/Lon
fig = plt.figure(1, figsize=(15, 15))
ax.add_feature(cfeature.COASTLINE.with_scale('50m'), linewidth=BORDERWIDTH,edgecolor=BORDERCOLOR)
ax.add_feature(cfeature.STATES, linewidth=BORDERWIDTH,edgecolor=BORDERCOLOR)
ax.add_feature(cfeature.BORDERS, linewidth=BORDERWIDTH,edgecolor=BORDERCOLOR)
ax1 = plt.subplot(111,projection=crs)
norm = BoundaryNorm(LEVELS,ncolors=plt.get_cmap('plasma').N,clip=False)
cf1 = ax1.pcolormesh(diffsum.lon0,diffsum.lat0,diffsum,cmap='plasma',transform=ccrs.PlateCarree(),norm=norm)
plt.savefig('testing%s.png' % (DSTRING))

请注意,如果我手动将结果图像中使用的DPI增加到1000,或将数字大小增加到100x100英寸,看起来也不错,但结果图像太大,在屏幕上查看起来很麻烦

关于pcolormesh,我是否应该做些什么来帮助更好地调整阴影单元格的分辨率,使其与实际图形本身的分辨率相适应


Tags: 图像add区域绘制分辨率pltaxfeature