标签: matplotlib-basemap

安装/导入Basemap时出现问题

我在我的64位机器上安装了Anaconda(版本1.6.2).它附带了一组很棒的库,但我还需要Basemap,它是matlibplot的一部分,但它不包含在Anaconda安装中.我试图安装Basemap并将文件移动到Anacaonda\Lib\site-packages\mpl_toolkits目录中,因为它是mpl_toolkits库的一部分.但是,当我尝试运行脚本时,我不断收到错误:"没有名为_geoslib的模块""无法导入pyproj"

我找到了pyproj库.我需要它吗?我在哪里可以找到geoslib?我如何让Basemap工作?

python geos matplotlib-basemap anaconda

8
推荐指数
1
解决办法
2万
查看次数

如何将轮廓图叠加在底图上

这是我几个月前提出的一个问题,我仍在努力寻求解决方案.我的代码并排给我一个底图和一个等高线图(但是打印到文件只给出了轮廓图),但是我希望它们叠加.最好的解决方案是https://gist.github.com/oblakeobjet/7546272,但这并没有说明如何引入数据,当你从头开始在线学习时很难.如果没有非常善良的人,我希望解决方案很容易,因为改变一行代码并且有人可以提供帮助.我的代码

#!/usr/bin/python
# vim: set fileencoding=UTF8

import numpy as np
import pandas as pd
from matplotlib.mlab import griddata
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt

#fig = plt.figure(figsize=(10,8))  #when uncommented draws map with colorbar but no contours

#prepare a basemap

m = Basemap(projection = 'merc',llcrnrlon = 21, llcrnrlat = -18, urcrnrlon = 34, urcrnrlat = -8, resolution='h')

# draw country outlines.

m.drawcountries(linewidth=0.5, linestyle='solid', color='k', antialiased=1, ax=None, zorder=None)
m.drawmapboundary(fill_color = 'white')
m.fillcontinents(color='coral',lake_color='blue')
parallels = np.arange(-18, -8, 2.)
m.drawparallels(np.arange(-18, …
Run Code Online (Sandbox Code Playgroud)

python gis matplotlib pandas matplotlib-basemap

8
推荐指数
1
解决办法
7633
查看次数

如何在Python中绘制3D地球?

我正试图围绕地球绘制一个卫星轨道.这就是我的目标:

在此输入图像描述

我使用mpl_toolkits.mplot3d中的Axes3D函数创建了这个图.理想情况下,我想做的是用实际地球拓扑替换简单球体.

如果您不确定我的意思,请查看MATLAB实现:

http://uk.mathworks.com/matlabcentral/fileexchange/13823-3d-earth-example

Basemap包可能有帮助(特别是bluemarble()函数),但不幸的是我无法使它在3D对象上工作.还有一个类似的问题在这里,但在2D情节回答这个问题导致3D领域的投影.我想在3D绘图上使用3D球体,这样我就可以围绕它旋转.

有没有人知道另一个包/实现.或者有没有办法让Basemap与3D对象一起使用?

- -编辑 - -

有人问了同样的问题,但还没有人回答

python 3d matplotlib-basemap

8
推荐指数
1
解决办法
3804
查看次数

Matplotlib底图:弹出框

我想知道如何在底图中创建一个弹出框.当我将鼠标悬停在某个位置时,它应该会触发弹出框.

这可能吗?

python events popup matplotlib matplotlib-basemap

7
推荐指数
1
解决办法
5483
查看次数

在多边形内轮廓不规则数据

我需要在多边形内创建海面温度(SST)数据的填充等高线图,但我不确定最好的方法.我有三个包含X,Y和SST数据的1D数组,我使用以下内容绘制以创建附图:

p=PatchCollection(mypatches,color='none', alpha=1.0,edgecolor="purple",linewidth=2.0)
levels=np.arange(SST.min(),SST.max(),0.2)
datamap=mymap.scatter(x,y,c=SST, s=55, vmin=-2,vmax=3,alpha=1.0)
Run Code Online (Sandbox Code Playgroud)

我希望能够绘制这些数据作为填充轮廓(contourf而不是散射)被约束(剪切)多边形边界内(紫线).非常感谢有关如何实现这一目标的建议.

在此输入图像描述

更新: 我最初尝试过griddata,但无法使其正常工作.但是,根据@eatHam提供的答案,我决定再试一次.当我选择方法'立方'时,我无法让我的scipy griddata工作,因为它一直悬挂在网格上,但是当我切换到matplotlib.mlab.griddata并使用'线性'插值时它起作用.掩盖边界的建议提供了一个非常粗略而不是我想要的精确解决方案. 使用蒙面剪辑显示解决方案的图像

我搜索了如何在matplotlib中剪辑轮廓的选项,我在这个链接上找到了@pelson的答案.我尝试了暗示的建议解决方案:"轮廓集本身没有set_clip_path方法,但您可以迭代每个轮廓集合并设置它们各自的剪辑路径".我的新的最终解决方案看起来像这样(见下图):

  p=PatchCollection(mypatches,color='none', alpha=1.0,edgecolor="purple",linewidth=2.0)
  levels=np.arange(SST.min(),SST.max(),0.2)
  grid_x, grid_y = np.mgrid[x.min()-0.5*(x.min()):x.max()+0.5*(x.max()):200j,
                          y.min()-0.5*(y.min()):y.max()+0.5*(y.max()):200j]
  grid_z = griddata(x,y,SST,grid_x,grid_y)

  cs=mymap.contourf(grid_x, grid_y, grid_z)

  for poly in mypatches:
      for artist in ax.get_children():
          artist.set_clip_path(poly)

      ax.add_patch(poly)
  mymap.drawcountries()
  mymap.drawcoastlines()
  mymap.fillcontinents(color='lightgrey',lake_color='none')
  mymap.drawmapboundary(fill_color='none')
Run Code Online (Sandbox Code Playgroud)

在推断北方的极端边缘方面,这种解决方案也可以特别改进.关于如何真正"填充"完整多边形的建议值得赞赏.我也想了解为什么mlab工作和scipy没有.

使用set_clip_path显示剪裁轮廓的最终解决方案

python matplotlib matplotlib-basemap

7
推荐指数
1
解决办法
3700
查看次数

Basemap上的国家标签

我想在Basemap上绘制轨迹,并将国家标签(名称)显示为叠加层.

这是当前代码及其生成的映射:

import pandas as pd 
import matplotlib.pyplot as plt 
from mpl_toolkits.basemap import Basemap


path = "path\\to\\data"

animal_data = pd.DataFrame.from_csv(path, header=None)
animal_data.columns = ["date", "time", "gps_lat", "gps_long"]

# data cleaning omitted for clarity 

params = {
        'projection':'merc', 
        'lat_0':animal_data.gps_lat.mean(), 
        'lon_0':animal_data.gps_long.mean(), 
        'resolution':'h', 
        'area_thresh':0.1, 
        'llcrnrlon':animal_data.gps_long.min()-10, 
        'llcrnrlat':animal_data.gps_lat.min()-10, 
        'urcrnrlon':animal_data.gps_long.max()+10, 
        'urcrnrlat':animal_data.gps_lat.max()+10
}
map = Basemap(**params)

map.drawcoastlines()
map.drawcountries()
map.fillcontinents(color = 'coral')
map.drawmapboundary()          

x, y = map(animal_data.gps_long.values, animal_data.gps_lat.values)

map.plot(x, y, 'b-', linewidth=1)    
plt.show()
Run Code Online (Sandbox Code Playgroud)

这导致地图: 移民

这是迁徙鸟类的轨迹图.虽然这是一张非常好的地图(!),但我需要国家/地区名称标签,因此很容易确定这只鸟飞过的国家.

是否有直接添加国家/地区名称的方式?

python gis matplotlib matplotlib-basemap

7
推荐指数
1
解决办法
2506
查看次数

使用Python在Matplotlib底图中将自然地球形状绘制为多边形

我接近得到我想要的地图.Matplotlib的底图是伟大的,但海岸线太粗,当我放大.我可以读自然地球形状文件,并绘制出来,这是好多了...但是当我尝试和填充的多边形,我认为这是治疗所有的点属于单个多边形.如何迭代多边形并正确显示地图?

提前致谢!

这是代码:

import numpy as np
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
from matplotlib.patches import Polygon
from matplotlib.collections import PatchCollection
%matplotlib inline

landColor, coastColor, oceanColor, popColor, countyColor = '#eedd99','#93ccfa','#93ccfa','#ffee99','#aa9955'

fig = plt.figure()
ax = fig.add_subplot(111)
s = 1900000
m = Basemap(projection='ortho',lon_0=-86.5,lat_0=30.3,resolution='l',llcrnrx=-s,llcrnry=-s,urcrnrx=s,urcrnry=s)
m.drawmapboundary(fill_color=oceanColor) # fill in the ocean

# generic function for reading polygons from file and plotting them on the map. This works with Natural Earth shapes.
def drawShapesFromFile(filename,facecolor,edgecolor,m):
    m.readshapefile(filename, 'temp', drawbounds = False)
    patches = [] …
Run Code Online (Sandbox Code Playgroud)

python matplotlib matplotlib-basemap

7
推荐指数
1
解决办法
888
查看次数

如何加速Python Basemap等值区动画

各种 来源获取想法,并结合我自己的想法,我试图创建一个动画地图,根据我的数据中的某些值显示国家的阴影.

基本过程是这样的:

  1. 运行数据库查询以获取数据集,按国家/地区和时间键入
  2. 使用pandas做一些数据操作(总和,平均等)
  3. 初始化底图对象,然后加载Load external shapefile
  4. 使用动画库为国家/地区着色,为数据集中的每个不同"时间"设置一帧.
  5. 保存为gif或mp4或其他

这很好用.问题是它非常慢.我有可能超过100k的时间间隔(超过几个指标)我想要制作动画,并且我得到每帧的平均时间为15秒,并且当帧数越多时,它就越糟糕.按照这个速度,我的计算机上的cpu和内存可能需要数周才能生成单个动画.

我知道matplotlib的速度并不快(例如:12)但是我读到了人们以5 + fps的速度生成动画并且想知道我做错了什么的故事.

我做过的一些优化:

  1. 仅重新着色动画功能中的国家/地区.这平均每帧约3秒,因此虽然可以改进,但它并不需要花费最多的时间.
  2. 我使用blit选项.
  3. 我尝试使用较小的绘图尺寸和不太详细的底图,但结果是微不足道的.

也许一个不太详细的shapefile会加快形状的着色,但正如我之前所说,每帧只有3s的改进.

这是代码(减去几个可识别的功能)

import pandas as pd
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import time

from math import pi
from sqlalchemy import create_engine
from mpl_toolkits.basemap import Basemap
from matplotlib.patches import Polygon
from matplotlib.collections import PatchCollection
from geonamescache import GeonamesCache
from datetime import datetime


def get_dataset(avg_interval, …
Run Code Online (Sandbox Code Playgroud)

python animation matplotlib matplotlib-basemap choropleth

7
推荐指数
0
解决办法
401
查看次数

如何在Ubuntu 16.04上的Python 3/Matplotlib 2中安装底图?

我试过了

pip3 install basemap
Run Code Online (Sandbox Code Playgroud)

但是底图似乎不在PyPI上.

一个老问题,但它没有答案.

我做了什么

  1. 我下载了底图1.07(源码)
  2. Matplotlib 2,numpy 1.11,PIL,python3-dev已安装

我不知道在哪里/如何获得GEOS(libgeos-dev?).我觉得我跟着README,并没有显示任何错误,但在尝试的第一线时,

$ python3
>>> from mpl_toolkits.basemap import Basemap
Run Code Online (Sandbox Code Playgroud)

我明白了

ImportError: libgeos-3.3.3.so: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)

它在

$ locate libgeos-3.3.3.so
/home/math/Downloads/basemap-1.0.7/geos-3.3.3/src/.libs/libgeos-3.3.3.so
/usr/local/lib/libgeos-3.3.3.so
Run Code Online (Sandbox Code Playgroud)

matplotlib python-3.x matplotlib-basemap ubuntu-16.04

7
推荐指数
1
解决办法
6931
查看次数

安装错误:在Windows上安装底图

我正在尝试安装底图,使用它似乎效果很好,

conda install -c conda-forge basemap
Run Code Online (Sandbox Code Playgroud)

在anaconda提示中。但是,当我在jupyternotebook上输入此代码时,

import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
Run Code Online (Sandbox Code Playgroud)

它显示了一个错误:

FileNotFoundError                         Traceback (most recent call last)
<ipython-input-2-4fc84cbcc854> in <module>()
  1 import matplotlib.pyplot as plt
----> 2 from mpl_toolkits.basemap import Basemap

~\Documents\DataScience\data\lib\site- 
packages\mpl_toolkits\basemap\__init__.py in <module>()
144 
145 # create dictionary that maps epsg codes to Basemap kwargs.
--> 146 epsgf = open(os.path.join(pyproj.pyproj_datadir,'epsg'))
147 epsg_dict={}
148 for line in epsgf:

FileNotFoundError: [Errno 2] No such file or directory: 'epsg'
Run Code Online (Sandbox Code Playgroud)

python installation matplotlib-basemap

7
推荐指数
1
解决办法
938
查看次数