代码之家  ›  专栏  ›  技术社区  ›  Aleksei Va

pcolormesh绘制的不是点,而是数据点之间的线

  •  1
  • Aleksei Va  · 技术社区  · 13 年前

    我需要将(来自卫星观测的)降雨汇总数据从grid2文件绘制到地图上。最后,我设法通过文本文件将数据加载到numpy数组中,并使用Basemap将其与图片坐标绑定。但问题是,Python并没有从数据中放置彩色点,而是倾向于在数据字段中的相邻点之间画线,所以绘图看起来很难看。 我看不出问题的根源。

    我的代码片段如下:

    import numpy as np
    import matplotlib
    matplotlib.use('Agg')
    from scipy import *
    from pylab import *
    from mpl_toolkits.basemap import Basemap
    import matplotlib.pyplot as plt
    from mpl_toolkits.basemap import cm
    

    之后,我读取了所需的数据,并生成了3个形状约为(100000,2)的numpy数组,其中分别包含纬度、经度、度数和每个数据点的值。我使用以下命令将其可视化:

    def joonista(lats,lons,value,nimi,clevs,koloriit):
    

    ---------所描述的重塑的片段(未显示),生成数组“lats”、“lons”和“value”------------

    map=Basemap(projection='aea',lat_1=30,lat_2=50,lat_0=45,lon_0=0,llcrnrlon=-30,llcrnrlat=20,urcrnrlon=80,urcrnrlat=53,resolution='l',)
    
    x, y = map(lons, lats)
    map.drawcoastlines(linewidth=0.17,color='0.7')
    map.drawcountries(linewidth=0.17,color='0.7')
    map.drawmeridians(np.arange(-50,60,5),linewidth=0.17,color='0.7',labels=[False,False,False,True])
    map.drawparallels(np.arange(-25, 70, 5),linewidth=0.17,color='0.7',labels=[True,False,False,False])
    varvid=mpl.colors.ListedColormap(koloriit)
    norm = mpl.colors.BoundaryNorm(clevs,varvid.N)
    cs = map.pcolormesh(x,y,value,cmap=varvid,norm=norm)
    savefig(nimi,dpi=300)
    plt.clf()
    
    joonista(latA,lonA,valueA,'h05',[-1,0.00001,0.001,0.01,0.1,0.3,0.5,1,2,3,4,5,6,7,8,9,10,11,12,13],['k','c','#a0fff9','#00b354','#69b300','#97ff03','#C2524D','#FF7500','#b3a900','#fff551','#515bff','#45adff','#da000d','#ff2a36','#ffa0a5','#f003ff','#f778ff','0.5','0.75'])
    joonista(latB,lonB,valueB,'h04',[-1,0.0000000000001,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],['k','c','#a0fff9','#00b354','#69b300','#97ff03','#C2524D','#FF7500','#b3a900','#fff551','#515bff','#45adff','#da000d','#ff2a36','#ffa0a5','#f003ff','#f778ff','0.5','0.75'])
    

    以下是一张示例图片:

    Example

    如果有人告诉我如何解决这个问题,我将不胜感激。

    阿列克谢

    1 回复  |  直到 13 年前
        1
  •  1
  •   Aleksei Va    13 年前

    根据Joe Kington的建议,我替换了命令

    cs=map.pcolormesh(x,y,value,cmap=varvid,norm=norm)
    

    按口令

    cs=plt.scatter(x,y,c=value,s=0.6, edgecolors='none',marker=',',cmap=varvid,norm=norm)
    

    其很好地可视化了降水分布。

    感谢您的帮助!