Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用python和basemap绘制不规则间隔的RGB图像?_Python_Matplotlib Basemap - Fatal编程技术网

如何使用python和basemap绘制不规则间隔的RGB图像?

如何使用python和basemap绘制不规则间隔的RGB图像?,python,matplotlib-basemap,Python,Matplotlib Basemap,考虑到我有三个矩阵来描述我想要绘制的数据: lons-具有[n_lons,n_lats]的二维矩阵 lats-具有[n_lons,n_lats]的二维矩阵 dataRGB-具有[n长,n宽,3]的三维矩阵 使用python和basemap绘制此类数据的首选方法是什么 对于伪彩色数据,使用pcolormesh方法非常简单: 数据-二维矩阵,带[n_lons,n_lats] m=基本映射(…) m、 pcolormesh(lons,lats,data,latlon=True) 通过阅读文档,

考虑到我有三个矩阵来描述我想要绘制的数据:

  • lons-具有[n_lons,n_lats]的二维矩阵
  • lats-具有[n_lons,n_lats]的二维矩阵
  • dataRGB-具有[n长,n宽,3]的三维矩阵
使用python和basemap绘制此类数据的首选方法是什么

对于伪彩色数据,使用pcolormesh方法非常简单:

  • 数据-二维矩阵,带[n_lons,n_lats]

    m=基本映射(…)

    m、 pcolormesh(lons,lats,data,latlon=True)

通过阅读文档,我觉得在这种情况下应该使用imshow命令,但是对于这种方法,需要定期网格化数据,我必须重新网格化并插值数据


有没有其他方法来绘制数据?

我不久前遇到了同样的问题,这是我能想到的唯一解决方案:

(请注意,这适用于matplotlib 1.3.0,,但不适用于1.1.0

假设var是您感兴趣的变量(NxMx3),lats是(N)x(M),lons是(N)x(M): 我们需要将像素中心lat/lons转换为像素角lat/lons(N+1)x(M+1) 获取坐标角点 屏蔽无效的数据 我们需要一个扁平元组(N*M,3)来传递给pcolormesh 设置更大的线宽将导致更大的边失真,并且 由于某些原因,较小的线宽将导致图像失真。
感谢分享您的解决方案!对我来说,pcolormesh似乎忽略了color关键字。此外,我还必须将线宽设置为零,否则每个像素都会绘制一个周围的多边形,从而有效地渲染黑色图像。是的,您可能需要修改线宽。基本上,如果我将线宽设置为0,则得到的图像与使用pcolor而不是pcolormesh打印图像时得到的图像相同。是否在0.0-1.0范围内而不是在0-255范围内输入颜色元组?实际上,我有MISR数据()的rgb图片,我用这段代码将其覆盖在底图背景上,所以它应该可以工作。你能分享你的LAT、LON和rgb元组的3x3数组吗?这个解决方案几乎适用于我,但我的图像被打乱了
from mpl_toolkits.basemap import Basemap

import numpy.ma as ma
import numpy as np

m = Basemap() #Define your map projection here
cornerLats=getCorners(lat);cornerLons=getCorners(lon)
xCorners,yCorners=m(cornerLats,cornerLons,inverse=True)
var=ma.masked_where(np.isnan(var),var)
colorTuple=tuple(np.array([var[:,:,0].flatten(),var[:,:,1].flatten(),var[:,:,2].flatten()]).transpose().tolist())
m.pcolormesh(xCorners,yCorners,var[:,:,0],color=colorTuple,clip_on=True,linewidth=0.05)

def getCorners(centers):

    one = centers[:-1,:]
    two = centers[1:,:]
    d1 = (two - one) / 2.
    one = one - d1
    two = two + d1
    stepOne = np.zeros((centers.shape[0] + 1,centers.shape[1]))
    stepOne[:-2,:] = one
    stepOne[-2:,:] = two[-2:,:]
    one = stepOne[:,:-1]
    two = stepOne[:,1:]
    d2 = (two - one) / 2.
    one = one - d2
    two = two + d2
    stepTwo = np.zeros((centers.shape[0] + 1,centers.shape[1] + 1))
    stepTwo[:,:-2] = one
    stepTwo[:,-2:] = two[:,-2:]
    return stepTwo