标签: matplotlib-basemap

通过调用clf()清除BufferRegion

我有一个应用程序,我想使用Basemap从shapefile中绘制县.绘制县多边形是渲染的瓶颈,因为我将绘制美国的同一区域(多次),我宁愿不必绘制所有多边形而不是我需要的.所以我有想法将县绘制成具有透明背景的图形,使用轴将轴复制到像素缓冲区copy_from_bbox(),并restore_region()在需要绘制县时恢复缓冲区.

基本代码如下:

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

map = Basemap(...) # Create Basemap object

map.readshapefile("countyp020", 'counties', linewidth=0.5) # Draws the county lines
plt.gcf().patch.set_alpha(0.0)
plt.gca().patch.set_alpha(0.0)

# Copy to the pixel buffer (county_buffer is of type BufferRegion)
county_buffer = plt.gcf().canvas.copy_from_bbox(plt.gca().bbox)

plt.clf() # This line is problematic (see below)

# Plot my data here ...

# Restore the pixel buffer
plt.gcf().canvas.restore_region(county_buffer)
plt.gcf().canvas.blit(plt.gca().bbox) # Not sure if this line is necessary

plt.gcf().canvas.draw()
Run Code Online (Sandbox Code Playgroud)

它的作用就像一个魅力...除了清除图形的线条.清除渲染之间的数字显然也会清除BufferRegion对象,因为我更新了标题和颜色条,我还想清除渲染之间的数字.

所以我的问题是,是否有人知道清除图形并保持像素缓冲区完整的方法?我一直没能找到在多文档BufferRegion,copy_from_bbox() …

python matplotlib matplotlib-basemap

5
推荐指数
0
解决办法
227
查看次数

如何在matplotlib底图中绘制高分辨率的etopo背景?

默认情况下,etopo背景pic的分辨率非常低.如何获得高分辨率背景?

matplotlib matplotlib-basemap

5
推荐指数
1
解决办法
5339
查看次数

通过PyFITS/AstroPy在FITS图像中进行笛卡尔投影问题

我看了看并找到了解决这个问题的方法,但我什么都没有.

我正在通过matplotlib生成矩形FITS图像,然后使用AstroPy(或PyFITS)将WCS坐标应用于它们.我的图片中银河系的经度和纬度,所以标题关键字适合我的地图应该是GLON-CARGLAT-CAR(笛卡尔投影).我已经看过在SAO DS9中使用相同地图投影的其他地图,并且坐标工作得很好...... 网格应该是完全正交的.可在此处找到FITS标准预测.

但是当我生成我的地图时,坐标根本不是笛卡儿.这是我的地图(左)和大致相同区域(右)的另一个参考地图的并排比较.两者都列出GLON-CAR,并GLAT-CAR在FITS头,但是当在SAO DS9看着我的是扭曲(注意坐标网格是什么SAO DS9基于在FITS头,或至少某处存储在FITS文件中的数据):

(左)我的地图,和(右)参考地图. HEADER关键字是相同的,都是笛卡儿

这是有问题的,因为如果投影错误,坐标分配算法将为每个像素分配不正确的坐标.

有没有人遇到这个,或者知道可能是什么问题?

我已经尝试过应用其他投影(只是为了看看它们在SAO DS9中的表现如何)并且它们很好......但我的笛卡尔和墨卡托投影并没有像他们应该的那样提出正交网格.

我不敢相信这会是AstroPy中的一个错误,但是我找不到任何其他原因...除非我在标题中的参数格式不正确,但我仍然看不出那会怎样导致问题我'经历.或者你会推荐使用其他东西吗?(我已经看过matplotlib底图但是在我的计算机上工作时遇到了一些麻烦).

我的标题代码如下:

 from __future__ import division
 import numpy as np
 from astropy.io import fits as pyfits # or use 'import pyfits, same thing'

 #(lots of code in between: defining variables and simple calculations...
 #probably not relevant)

 header['BSCALE'] = (1.00000, 'REAL = TAPE*BSCALE + BZERO')
 header['BZERO'] = (0.0)
 header['BUNIT'] = ('mag ', 'UNIT OF …
Run Code Online (Sandbox Code Playgroud)

python matplotlib-basemap fits pyfits astropy

5
推荐指数
1
解决办法
848
查看次数

用于在城市地图上绘制点的好python工具包?

我试图在城市地图上绘制一堆点,但我很难找到一个效果很好的套餐.看起来Matplotlib Basemap没有包含足够30英里半径的点的详细信息,例如我没有看到一种方法来小规模地添加高速公路和其他区别特征.

因此,我问你是否可以建议如何将这些类型的城市地图特征添加到底图,或者是否有另一个包适用于城市地图上30英里范围的散点图.谢谢你的帮助!

python map ipython matplotlib-basemap

5
推荐指数
1
解决办法
6070
查看次数

3D CartoPy类似于Matplotlib-Basemap

我是Python的新手,关于Cartopy能够在3D情节中使用的问题.以下是使用的示例matplotlibBasemap.

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from mpl_toolkits.basemap import Basemap

m = Basemap(projection='merc',
            llcrnrlat=52.0,urcrnrlat=58.0,
            llcrnrlon=19.0,urcrnrlon=40.0,
            rsphere=6371200.,resolution='h',area_thresh=10)

fig = plt.figure()
ax = Axes3D(fig)
ax.add_collection3d(m.drawcoastlines(linewidth=0.25))
ax.add_collection3d(m.drawcountries(linewidth=0.35))
ax.add_collection3d(m.drawrivers(color='blue'))

ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Height')

fig.show()
Run Code Online (Sandbox Code Playgroud)

这将在3D轴内创建一个贴图,以便您可以在曲面上绘制对象.但随着Cartopy回归matplotlib.axes.GeoAxesSubplot.不清楚如何拍摄并添加到上面的3D图形/轴上matplotlib-basemap.

那么,有人可以提供有关如何使用Cartopy进行类似3D绘图的任何指示吗?

3d matplotlib python-2.7 matplotlib-basemap cartopy

5
推荐指数
1
解决办法
2641
查看次数

散点图数据不会出现在'hammer'底图中的大陆上

我试图使用散点图在'hammer'底图上绘制数据集.但是,数据点不会在各大洲之上绘制.我注意到在matplotlib 示例中,大陆上也没有数据(我假设这是由于示例的性质).我想知道我是否做错了什么,或者是否使用"锤子"设计无法在各大洲上绘制数据.

如果是这种情况,是否有一个理想的底图用于在整个地球上绘制散点图数据(使用浮雕图会很棒,但此时我会满足于什么)?

python scatter matplotlib matplotlib-basemap

5
推荐指数
1
解决办法
3133
查看次数

如何创建可重用的底图

继续我之前的问题:如何在matplotlib中叠加数字我想知道如何创建一个可重用的basemap对象.我的问题是a basemap不是一个pyplot对象,所以我收到的解决方案效果很好,figures / axes但不是basemap对象.

我试图四处寻找解决方案,但找不到任何解决方案.

python matplotlib figure matplotlib-basemap

5
推荐指数
1
解决办法
841
查看次数

使用底图和python在地图中绘制海洋

我正在绘制netCDF文件:https: //goo.gl/QyUI4J

使用下面的代码,地图如下所示: 在此输入图像描述

但是,我希望海洋是白色的.更好的是,我希望能够指定海洋出现的颜色.如何更改下面的代码来做到这一点?现在,问题是海洋正在数据规模上绘制.(请注意,netCDF文件很大~3.5 GB).

import pdb, os, glob, netCDF4, numpy
from matplotlib import pyplot as plt
from mpl_toolkits.basemap import Basemap

def plot_map(path_nc, var_name):
    """
    Plot var_name variable from netCDF file
    :param path_nc: Name of netCDF file
    :param var_name: Name of variable in netCDF file to plot on map
    :return: Nothing, side-effect: plot an image
    """

    nc = netCDF4.Dataset(path_nc, 'r', format='NETCDF4')
    tmax  = nc.variables['time'][:]

    m = Basemap(projection='robin',resolution='c',lat_0=0,lon_0=0)

    m.drawcoastlines()
    m.drawcountries()

    # find x,y of map projection grid.
    lons, lats …
Run Code Online (Sandbox Code Playgroud)

python plot matplotlib-basemap

5
推荐指数
2
解决办法
3826
查看次数

cartopy:在NOAA APT图像上叠加地图

我正在研究一个试图解码NOAA APT图像的项目,到目前为止,我已经达到了可以从RTLSDR的原始IQ记录中获取图像的阶段.这是解码后的图像之一, 解码后的NOAA APT图像,此图像将用作代码的输入(此处显示为m3.png)

现在我正在处理图像上的地图边界重叠(注意:仅在上图的左半部分)

我们知道,捕获图像的时间和卫星信息:位置,方向等.因此,我使用卫星的位置来获得地图投影的中心和卫星的方向以适当地旋转图像.

首先我尝试在Basemap中,这是代码

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

im = plt.imread('m3.png')
im = im[:,85:995] # crop only the first part of whole image

rot = 198.3913296679117 # degrees, direction of sat movement
center = (50.83550180700588, 16.430852851867176) # lat long

rotated_img = ndimage.rotate(im, rot) # rotate image

w = rotated_img.shape[1]*4000*0.81 # in meters, spec says 4km per pixel, but I had to make it 81% …
Run Code Online (Sandbox Code Playgroud)

noaa matplotlib-basemap cartopy

5
推荐指数
1
解决办法
492
查看次数

在图上添加透明图片

下面我的python脚本在使用Basemap模块生成的地图上添加了一张图片(这个简单示例中生成的矩形)和GPS轨迹.
现在我想让两个轨道都是透明的.通过alphakwarg 的赛道没有问题,但我无法想象如何为图片做这件事.

import matplotlib.pyplot as plt
from PIL import Image
from matplotlib.offsetbox import AnnotationBbox, OffsetImage
from mpl_toolkits.basemap import Basemap

lats = [ 45, 15  ]
lons = [ 0 , 100 ]

fig = plt.figure( dpi = 300 )
ax  = plt.subplot(111)

myBaseMap = Basemap( projection='ortho', lat_0=lats[-1], lon_0=lons[-1] )
myBaseMap.bluemarble()

planeImg = Image.new('RGB', (600, 300), color = 'red')
planeXY  = myBaseMap( lons[-1], lats[-1] )
x,y      = myBaseMap( lons, lats )

plt.plot( x, y, color='r', alpha=0.5, linewidth=3  ) …
Run Code Online (Sandbox Code Playgroud)

python image matplotlib matplotlib-basemap

5
推荐指数
1
解决办法
838
查看次数