首页 > 解决方案 > django 应用程序中地图上的散点图引发底图错误

问题描述

我在 jupyter notebook 的印度地图上创建了一个散点图,但是当我尝试在我的 djnago 应用程序中运行相同的代码时。它提出了

ModuleNotFoundError: No module named 'mpl_toolkits.basemap'

这是代码:

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap

# make up some data for scatter plot
lats = np.random.randint(6, 37, size=50)
lons = np.random.randint(68, 97, size=50)

fig = plt.gcf()
fig.set_size_inches(8, 6.5)

m = Basemap(projection='cyl', \
            llcrnrlat=6., urcrnrlat=37., \
            llcrnrlon=68., urcrnrlon=97., \
            lat_ts=20, \
            resolution='c',epsg=3857)

m.bluemarble(scale=1)   
m.drawcoastlines(color='white', linewidth=0.2) 
m.drawmapboundary(fill_color='#D3D3D3')


x, y = m(lons, lats) 
plt.scatter(x, y, 10, marker='o', color='Red') 

plt.show()

我在我的 django 应用程序中使用相同的 conda 解释器。这个错误的原因是什么?

标签: pythondjangomatplotlib-basemap

解决方案


我在Win10下使用Anaconda。对于不同的操作系统或安装,解决方案可能会有所不同,但我可以尝试绘制路径。

  1. 您必须安装底图。见这里这里。对我来说conda install -c conda-forge basemap-data-hires确实有效。
  2. 导入时from mpl_toolkits.basemap import Basemap出现错误:KeyError: PROJ_LIB. 按照这里的经验,你必须在里面找到一个与epsg共享的目录。它预计在condaanaconda目录中。
  3. 我在我的Anaconda3目录中进行了搜索,并找到了这条路径:"C:\Anaconda3\Library\share"
  4. 然后下面的代码对我有用(你的代码也给出了一个很好的图片:-):

    import os
    proj_lib = "C:\Anaconda3\Library\share"
    os.environ["PROJ_LIB"] = proj_lib
    
    import numpy as np
    import matplotlib.pyplot as plt
    
    from mpl_toolkits.basemap import Basemap
    
    plt.figure(figsize=(8, 8))
    m = Basemap(projection='ortho', resolution=None, lat_0=50, lon_0=-100)
    m.bluemarble(scale=0.5);
    

推荐阅读