【问题标题】:Python Basemap does not show plotted pointsPython底图不显示绘制点
【发布时间】:2017-04-16 08:07:57
【问题描述】:

我刚开始使用 Python 底图,但我无法指出出现在我的地图中!...这是我正在尝试构建的函数:

def map_plot(df):

    df = df.apply(pd.to_numeric, errors='coerce').dropna()
    m = Basemap(projection='mill',
                llcrnrlat=25,
                llcrnrlon=-130,
                urcrnrlat=50,
                urcrnrlon=-60,
                resolution='l') #proyeccion de Miller

    m.drawcoastlines()
    m.drawcountries(linewidth=2)
    m.drawstates(color='b')
    m.fillcontinents(color = '#888888')
    x_map, y_map = m(df['Latitude'].values, df['Longitud'].values)
    x = []
    y = []

    for x_map, y_map in zip(x_map, y_map):
        if y_map > 0: continue
        x.append(x_map)
        y.append(y_map)
    m.plot(x, y, 'g^', markersize=5)
    plt.show()

所以,地图显示了,但没有绘制一个点。 这是我的数据在计算投影坐标之前的样子:

,Latitude,Longitud
0,35.93,-77.79
1,35.93,-77.79
2,38.78,-80.22
3,37.65,-82.25
4,41.12,-104.82
5,41.85,-80.83
6,39.7,-84.21
7,39.9,-80.94
8,39.1,-84.54
9,39.93,-83.82
10,40.05,-82.39

我做错了什么? 谢谢!!!

【问题讨论】:

    标签: python pandas matplotlib maps matplotlib-basemap


    【解决方案1】:

    你的线路

    if y_map > 0: continue
    

    给你带来了麻烦。 y 的每个值都 > 0,因此正在应用 continue,它跳到 for 循环的下一次迭代。因此,你的台词

        x.append(x_map)
        y.append(y_map)
    

    从未使用过

    【讨论】:

    • 谢谢你hugke729,但遗憾的是这不是问题,我检查了之后我得到了坐标列表。数据一团糟,但我都清理了。还尝试在谷歌地图中绘制,它成功了!,这个底图还有什么?
    • 刚刚注意到您的m(df['Latitude'].values, df['Longitud'].values) 行是错误的。经度应该是第一个参数,而不是纬度
    【解决方案2】:

    您需要网格坐标 (x, y) 在地图上绘制点。这是实现所需坐标变换并进行绘图的代码。

    from mpl_toolkits.basemap import Basemap
    import matplotlib.pyplot as plt
    
    m = Basemap(projection='mill',
                    llcrnrlat=20,
                    llcrnrlon=-130,
                    urcrnrlat=50,
                    urcrnrlon=-60,
                    resolution='l')  # Miller proj, USA
    
    m.drawcoastlines()
    m.drawcountries(linewidth=2)
    m.drawstates(color='b')
    m.fillcontinents(color = '#888888')
    
    # sample data to plot with
    lons = [-100, -75]  # degrees
    lats = [25, 40]
    
    # plotting points
    for lon, lat in zip(lons, lats):
        x, y = m.projtran(lon, lat)        # coord transformation      
        m.plot(x, y, 'r^', markersize=15)  # needs grid coords to plot
    
    plt.show()
    

    【讨论】:

      猜你喜欢
      • 2018-09-04
      • 1970-01-01
      • 2015-07-12
      • 1970-01-01
      • 2017-01-13
      • 1970-01-01
      • 2020-02-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多