我想在立体地图上显示一些值(在这种情况下是南极(spstere)).如果我在圆柱形地图(cyl)上显示它们一切都很好:
m = Basemap(projection='cyl',llcrnrlon=-180,llcrnrlat=-90,urcrnrlon=180,urcrnrlat=90,resolution='i')
CS = m.scatter(lon2,lat2,c=BT2,edgecolors='none',s=sz,cmap='gray')
Run Code Online (Sandbox Code Playgroud)
现在我想在南极立体地图上使用相同的值,但我无法让它工作:
m = Basemap(projection='spstere',boundinglat=-10,lon_0=180,resolution='c')
CS = m.scatter(lon2,lat2,c=BT2,edgecolors='none',s=sz,cmap='gray')
Run Code Online (Sandbox Code Playgroud)
我做什么我只能画大陆,但没有数据.
我在使用matplotlib/pyplot/basemap时遇到了麻烦.我在地图上绘制轮廓线(气压).我使用clabel来显示轮廓线的值.但问题是:值和轮廓线之间的填充太多.我找到了参数"inline_spacing",我将其设置为零.但仍有很多自由空间.有任何想法吗?

Python代码:
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
import pygrib
filename = "file.grib2"
grbs = pygrib.open('/data/' + filename)
grb = grbs[2]
data = grb.values
datac = data*0.01
lats, lons = grb.latlons()
fig = plt.figure()
m = Basemap(projection='stere',lon_0=5,lat_0=90.0,\
llcrnrlon=-25.0,urcrnrlon=60.0,llcrnrlat=30.0,urcrnrlat=60.0,resolution='l')
x, y = m(lons, lats)
levs = range(940,1065,5)
S1=plt.contour(x,y,datac,levs,linewidths=0.5,colors='b')
plt.clabel(S1,inline=1,inline_spacing=0,fontsize=8,fmt='%1.0f',colors='b')
m.drawmapboundary(fill_color='w')
m.drawcoastlines(linewidth=0.2)
plt.savefig('test.png', bbox_inches='tight',pad_inches=0.05, dpi=100)
Run Code Online (Sandbox Code Playgroud)
谢谢.
我正在通过Matplotlib在美国和加拿大东海岸的底图上绘制数据.除了基础层(填充的等高线图),我使用Matplotlib的readshapefile工具在数据顶部覆盖了这个焦点区域的shapefile.

我想知道如何掩盖shapefile之外的所有网格数据.我显然可以通过Matplotlib做一个maskocean命令,但我仍然留在圣劳伦斯以西的填充轮廓.现在有人怎么做?我在线搜索没有太多运气.
def make_map(lon,lat,param):
fig, ax = plt.subplots()
ax.axis('off')
x1 = -83.
x2 = -57.
y1 = 37.
y2 = 50.
projection='merc'
resolution='h'
m = Basemap(projection=projection, llcrnrlat=y1, urcrnrlat=y2, llcrnrlon=x1,
urcrnrlon=x2, resolution=resolution)
x,y = m((lon-360.),lat)
m.ax = ax
my_cmap = cm.get_cmap('coolwarm')
pp = m.contourf(x, y, param, 30, cmap=my_cmap, extend='both')
m.drawmapscale(-67, 39.5, -70, 43.5, 500, fontsize=8, barstyle='fancy')
return fig, m, x, y
def drawstates(ax, shapefile='../StateProv_UTMrp'):
shp = m.readshapefile(shapefile, 'states',zorder = 1, drawbounds=True)
for nshape, seg in enumerate(m.states):
poly = Polygon(seg, facecolor='w',alpha=0.0, edgecolor='k') …Run Code Online (Sandbox Code Playgroud) 从各种 来源获取想法,并结合我自己的想法,我试图创建一个动画地图,根据我的数据中的某些值显示国家的阴影.
基本过程是这样的:
这很好用.问题是它非常慢.我有可能超过100k的时间间隔(超过几个指标)我想要制作动画,并且我得到每帧的平均时间为15秒,并且当帧数越多时,它就越糟糕.按照这个速度,我的计算机上的cpu和内存可能需要数周才能生成单个动画.
我知道matplotlib的速度并不快(例如:1和2)但是我读到了人们以5 + fps的速度生成动画并且想知道我做错了什么的故事.
我做过的一些优化:
也许一个不太详细的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) 我试图在使用maskoceans时识别被遮罩像素的索引,这样我就可以只调用我目前正在全球范围内的代码中的陆地像素,即使我不关心海洋像素.我尝试了不同的方法,并注意到我的情节看起来很奇怪.最后,我意识到在我的纬度/经度指数中出现了混乱,尽管我实际上并没有碰到它们!这是代码:
import numpy as np
import netCDF4
from datetime import datetime, timedelta
import matplotlib
import matplotlib.pyplot as plt
from matplotlib.ticker import MaxNLocator
import matplotlib.dates as mpldates
import heat_transfer_coeffs
from dew_interface import get_dew
from matplotlib.dates import date2num, num2date
import numpy as np
import netCDF4
import heat_transfer_coeffs as htc
from jug.task import TaskGenerator
import matplotlib.cm as cm
import mpl_toolkits
from mpl_toolkits import basemap
from mpl_toolkits.basemap import Basemap, maskoceans
np.seterr(all='raise')
# set global vars
ifile = netCDF4.Dataset('/Users/myfile.nc', 'r')
times = ifile.variables['time'][:].astype(np.float64) # hours …Run Code Online (Sandbox Code Playgroud) python latitude-longitude netcdf python-2.7 matplotlib-basemap
我画了一张标有纬度的地图,但我想将字体设置为"Times New Roman".如何使它成为可能?
m.drawparallels(相似之处,标签= [1,0,0,0],字体大小= 12)
我试图在 a 上绘制 1x1 度数据matplotlib.Basemap,并且我想用白色填充海洋。但是,为了让海洋的边界遵循 绘制的海岸线matplotlib,白色海洋掩膜的分辨率应该比我的数据分辨率高很多。
搜索了很长时间后,我尝试了两种可能的解决方案:
(1)maskoceans()和is_land()函数,但由于我的数据分辨率低于底图绘制的地图,因此边缘看起来不太好。我也不想将我的数据插入到更高分辨率。
(2) m.drawlsmask(),但由于无法分配 zorder ,因此 pcolormesh 图始终覆盖掩码。
这段代码
import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.basemap as bm
#Make data
lon = np.arange(0,360,1)
lat = np.arange(-90,91,1)
data = np.random.rand(len(lat),len(lon))
#Draw map
plt.figure()
m = bm.Basemap(resolution='i',projection='laea', width=1500000, height=2900000, lat_ts=60, lat_0=72, lon_0=319)
m.drawcoastlines(linewidth=1, color='white')
data, lon = bm.addcyclic(data,lon)
x,y = m(*np.meshgrid(lon,lat))
plt.pcolormesh(x,y,data)
plt.savefig('1.png',dpi=300)
Run Code Online (Sandbox Code Playgroud)
添加m.fillcontinents(color='white')产生以下图像,这是我需要的,但要填充海洋而不是陆地。

编辑:
m.drawmapboundary(fill_color='lightblue') 也会填满土地,因此无法使用。
理想的结果是海洋是白色的,而我所绘制的则plt.pcolormesh(x,y,data)显示在陆地上。
我是使用 python 的新手。
第 1 步:我有一个 CSV 文件,其中包含有关车辆驾驶信号的信息。
步骤 2:从文件中,我以 pandas 数据帧的形式提取了一些纬度和经度数据。
第 3 步:现在我将该数据框保存为 CSV 文件。
第 4 步:保存后,我将该文件提供给 Online GPS Visualizer,以便它生成一个开放街道地图。
[![在此处输入图像描述][1]][1]
我只想在 python 中绘制相同的地图,而不是向 Online GPS Visualizer 提供 Lat&Long csv 文件。那么我应该使用哪个库?底图库适合我的工作还是我应该选择其他选择?
在 python 中绘制地图后,我只想突出显示地图中的一些纬度和经度点。(如图所示)
当在底图投影(或 cartopy 投影)上使用 pcolormesh 绘制数据时,我注意到当我将 alpha 值设置为小于 1 时,会出现奇怪的线条。
示例代码:
from mpl_toolkits.basemap import Basemap
import numpy as np
import matplotlib.pyplot as plt
plt.clf()
dpp =1 # degrees per pixel
lons = np.arange(-180,180+dpp,dpp)
lats = -1*np.arange(-90,90+dpp,dpp)
m = Basemap(projection='robin',lon_0=0)
data = np.random.random((np.size(lats), np.size(lons)))
lons, lats = np.meshgrid(lons, lats)
x, y = m(lons, lats)
im = m.pcolormesh(x, y, x, latlon=False, cmap='RdBu')
#im = m.pcolormesh(lons, lats, data, latlon=True, cmap='RdBu')
m.colorbar(im)
plt.show()
Run Code Online (Sandbox Code Playgroud)
输出显示出现奇怪的行:
如果我设置 alpha=1,线条就会消失并且行为符合预期:
关于如何让 pcolormesh 使用非零 alpha 值有什么想法吗?
我收到一个 IndexError:用作索引的数组必须是 pcolormesh 行的整数(或布尔)类型,知道如何处理这个问题。
脚本:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
data = np.loadtxt('out (copie).txt')
lats = data[:,0]
lons = data[:,1]
codg_tec = data[:,2]
m = Basemap(projection = 'merc', llcrnrlon= -9, llcrnrlat=19, urcrnrlon= 12, urcrnrlat= 37, resolution= 'i')
m.drawcoastlines()
lon, lat = np.meshgrid(lons, lats)
x, y = m(lon, lat)
cb = m.pcolormesh(x, y, np.squeeze(data[codg_tec]) , shading='flat', cmap=plt.cm.jet)
cbar = m.colorbar(cb, location = 'right', pad = '10%')
m.drawmapboundary()
m.drawmapscale()
m.drawmeridians(np.arange(-9,12,5), labels=[False,False,False,True])
m.drawparallels(np.arange(19,38,5), labels=[True,False,False,False])
m.drawstates()
m.drawcountries() …Run Code Online (Sandbox Code Playgroud) python ×10
matplotlib ×6
animation ×1
cartopy ×1
choropleth ×1
esri ×1
mask ×1
netcdf ×1
pandas ×1
python-2.7 ×1
python-3.x ×1
shapefile ×1