如何在tiff图像上绘制规则的网格线?我想在图像上为每个间隔(比如说100 x 100像素)绘制规则的正方形网格,并将其与图纸一起保存.我还需要在每个网格框的中间将每个网格ID覆盖为"1","2",....
我从Ubuntu包安装python-matplotlib并python-mpltoolkits.basemap安装.安装python-mpltoolkits.basemap也python-dap作为依赖项安装.
当我导入底图时,我收到此警告:
>>> import mpl_toolkits.basemap
/usr/lib/pymodules/python2.7/mpl_toolkits/__init__.py:2: UserWarning: Module dap was
already imported from None, but /usr/lib/python2.7/dist-packages is being added to sys.path
__import__('pkg_resources').declare_namespace(__name__)
Run Code Online (Sandbox Code Playgroud)
这是否意味着我有两个相互矛盾的安装dap?(这可能是一些旧的手动安装的残余.)这是一个有点类似的警告消息,但在他的情况下,消息告诉另一个,冲突的安装位于何处.我的信息只是说None.这是什么意思?
编辑1:
>>> import sys
>>> print sys.modules['dap']
<module 'dap' (built-in)>
Run Code Online (Sandbox Code Playgroud)
编辑2:
$ python -S
Python 2.7.3 (default, Sep 26 2012, 21:53:58)
[GCC 4.7.2] on linux2
>>> import sys
>>> print sys.modules['dap']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: …Run Code Online (Sandbox Code Playgroud) 我正在尝试安装并将Basemap库导入我的Jupyter Notebook,但这会返回以下错误:
KeyError: 'PROJ_LIB'
Run Code Online (Sandbox Code Playgroud)
经过一些网上研究,我了解到我要在Anaconda的独立环境中安装Basemap.在创建新环境并安装Basemap(以及所有其他相关库)之后,我已经激活了环境.但是在导入Basemap时,我仍然会收到相同的KeyError.
这是我在MacOS终端中所做的:
conda create --name Py3.6 python=3.6 basemap
source activate Py3.6
conda upgrade proj4
env | grep -i proj
conda update --channel conda-forge proj4
Run Code Online (Sandbox Code Playgroud)
然后在Jupyter Notebook中运行以下代码:
from mpl_toolkits.basemap import Basemap
Run Code Online (Sandbox Code Playgroud)
任何人都可以告诉我为什么会导致KeyError?
我知道强大的包Basemap可用于绘制具有状态边界的美国地图.我已经从Basemap GitHub存储库中调整了这个示例,以绘制由各自的人口密度着色的48个州:

现在我的问题是:是否有一种简单的方法可以将阿拉斯加和夏威夷添加到此地图中并将其放置在自定义位置,例如左下角?像这样的东西:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap as Basemap
from matplotlib.colors import rgb2hex
from matplotlib.patches import Polygon
# Lambert Conformal map of lower 48 states.
m = Basemap(llcrnrlon=-119,llcrnrlat=22,urcrnrlon=-64,urcrnrlat=49,
projection='lcc',lat_1=33,lat_2=45,lon_0=-95)
# draw state boundaries.
# data from U.S Census Bureau
# http://www.census.gov/geo/www/cob/st2000.html
shp_info = m.readshapefile('st99_d00','states',drawbounds=True)
# population density by state from
# http://en.wikipedia.org/wiki/List_of_U.S._states_by_population_density
popdensity = {
'New Jersey': 438.00,
'Rhode Island': 387.35,
'Massachusetts': 312.68,
'Connecticut': 271.40,
'Maryland': 209.23,
'New York': …Run Code Online (Sandbox Code Playgroud) 我正在使用matplotlib的底图绘制地图.这些数据遍布全球,但我只想保留非洲大陆上的所有数据并将其丢弃在海洋上.有没有办法可以过滤数据,还是有办法再次绘制海洋来覆盖数据?
我希望能够使用鼠标事件在matplotlib图上绘制选区.我没有找到有关如何使用python执行此操作的信息.
最后,我希望能够在使用matplotlib底图创建的地图上用鼠标绘制感兴趣的区域并检索角坐标.
任何人都有想法,例如,参考?
谢谢,
格雷格
class Annotate(object):
def __init__(self):
self.ax = plt.gca()
self.rect = Rectangle((0,0), 1, 1, facecolor='None', edgecolor='green')
self.x0 = None
self.y0 = None
self.x1 = None
self.y1 = None
self.ax.add_patch(self.rect)
self.ax.figure.canvas.mpl_connect('button_press_event', self.on_press)
self.ax.figure.canvas.mpl_connect('button_release_event', self.on_release)
self.ax.figure.canvas.mpl_connect('motion_notify_event', self.on_motion)
def on_press(self, event):
print 'press'
self.x0 = event.xdata
self.y0 = event.ydata
self.x1 = event.xdata
self.y1 = event.ydata
self.rect.set_width(self.x1 - self.x0)
self.rect.set_height(self.y1 - self.y0)
self.rect.set_xy((self.x0, self.y0))
self.rect.set_linestyle('dashed')
self.ax.figure.canvas.draw()
def on_motion(self,event):
if self.on_press is True:
return
self.x1 = event.xdata
self.y1 = event.ydata
self.rect.set_width(self.x1 - …Run Code Online (Sandbox Code Playgroud) 我在我的64位机器上安装了Anaconda(版本1.6.2).它附带了一组很棒的库,但我还需要Basemap,它是matlibplot的一部分,但它不包含在Anaconda安装中.我试图安装Basemap并将文件移动到Anacaonda\Lib\site-packages\mpl_toolkits目录中,因为它是mpl_toolkits库的一部分.但是,当我尝试运行脚本时,我不断收到错误:"没有名为_geoslib的模块""无法导入pyproj"
我找到了pyproj库.我需要它吗?我在哪里可以找到geoslib?我如何让Basemap工作?
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import numpy as np
m = Basemap(projection='cyl',resolution='c',area_thresh=10,llcrnrlon=-180,urcrnrlon=180,\
llcrnrlat=-90,urcrnrlat=90)
m.etopo()
Run Code Online (Sandbox Code Playgroud)
实际上,我不知道如何提供显示比例尺所需的lat,lon,lat0和lon0参数.如何提供?
map.drawmapscale(????,barstyle='simple',units='km',fontsize=9,labelstyle='simple',fontcolor='k')
Run Code Online (Sandbox Code Playgroud)
教程在
http://matplotlib.org/basemap/api/basemap_api.html将其描述如下:
drawmapscale(lon, lat, lon0, lat0, length, barstyle='simple', units='km', fontsize=9, yoffset=None, labelstyle='simple', fontcolor='k', fillcolor1='w', fillcolor2='k', ax=None, format='%d', zorder=None)
Run Code Online (Sandbox Code Playgroud)
如果有人能帮助我,我将不胜感激.
这是我几个月前提出的一个问题,我仍在努力寻求解决方案.我的代码并排给我一个底图和一个等高线图(但是打印到文件只给出了轮廓图),但是我希望它们叠加.最好的解决方案是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) 我正试图围绕地球绘制一个卫星轨道.这就是我的目标:
我使用mpl_toolkits.mplot3d中的Axes3D函数创建了这个图.理想情况下,我想做的是用实际地球拓扑替换简单球体.
如果您不确定我的意思,请查看MATLAB实现:
http://uk.mathworks.com/matlabcentral/fileexchange/13823-3d-earth-example
Basemap包可能有帮助(特别是bluemarble()函数),但不幸的是我无法使它在3D对象上工作.还有一个类似的问题在这里,但在2D情节回答这个问题导致3D领域的投影.我想在3D绘图上使用3D球体,这样我就可以围绕它旋转.
有没有人知道另一个包/实现.或者有没有办法让Basemap与3D对象一起使用?
- -编辑 - -
有人问了同样的问题,但还没有人回答