【问题标题】:Pcolormesh on basemap底图上的 Pcolormesh
【发布时间】:2016-06-30 20:57:46
【问题描述】:

我有一个很长的纬度和经度列表,最终目标是在北美地图上绘制每个纬度/经度对的出现次数。例如,我有一个名为 sort_df 的 DataFrame,它看起来像:

longitude  -95  -94  -93  -92
latitude
43           0    4    8    3
44           7    3    0    0 

使用 sort_df.values 和 pmeshcolor,我可以绘制数据。代码如下:

m.Basemap(llcrnrlon = -170, llcrnrlat = 10, urcrnrlon = -50, urcrnrlat = 80)
m.drawcoastlines()
m.drawstates()
ny = sort_df.shape[0]
nx = sort_df.shape[1]
lons, lats = m.makegrid(nx,ny)
x,y = m(lons,lats)
my_cmap = plt.get_cmap('rainbow')
my_cmap.set_under('white')
data = np.array(sort_df.values)
cs = m.pcolormesh(x,y,data,cmap = my_cmap, vmin = 1)
m.colorbar(cs,extend = 'min')
plt.show()

上面的代码生成的图如下所示:

问题:在 sort_df 定义的纬度/经度网格上应该只有颜色。

问题:如何使网格出现在地图上的正确位置?

【问题讨论】:

    标签: python matplotlib matplotlib-basemap


    【解决方案1】:

    您在转换经纬度时打印错误。您的数组 latslons 为空。

    您的代码的另一个问题是 data 必须具有 [nx-1, ny-1] 的形状才能使用 pcolormesh 绘制(它在点之间绘制):

    import numpy as np
    from mpl_toolkits.basemap import Basemap
    import matplotlib.pyplot as plt
    from pandas import DataFrame
    
    m = Basemap(llcrnrlon = -170, llcrnrlat = 10, urcrnrlon = -50, urcrnrlat = 80)
    m.drawcoastlines()
    m.drawstates()
    
    lon = np.array([-95,  -94,  -93,  -92, -91])
    lat = np.array([43, 42, 41])
    data = np.array([[0,4,8,3],[7,3,0,0]])
    # you have to write just like here to convert coordinates
    x,y = m(lon,lat)
    
    my_cmap = plt.get_cmap('rainbow')
    my_cmap.set_under('white')
    cs = m.pcolormesh(x,y,data,cmap = my_cmap)
    m.colorbar(cs, extend = 'min')
    plt.show()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-04
      • 1970-01-01
      • 2017-05-30
      • 2020-04-15
      • 2016-02-19
      • 1970-01-01
      • 2011-12-08
      • 1970-01-01
      相关资源
      最近更新 更多