标签: matplotlib-basemap

如何使石斑鱼和轴的长度相同?

对于我的作业,我应该使用 matplotlib 在地图上绘制 20 次飓风的轨迹。但是,当我运行代码时,出现错误:AssertionError:Grouper and axis must be the same length

这是我的代码:

import numpy as np
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt 
from PIL import *
fig = plt.figure(figsize=(12,12))

ax = fig.add_axes([0.1,0.1,0.8,0.8])

m = Basemap(llcrnrlon=-100.,llcrnrlat=0.,urcrnrlon=-20.,urcrnrlat=57.,
        projection='lcc',lat_1=20.,lat_2=40.,lon_0=-60.,
        resolution ='l',area_thresh=1000.)

m.bluemarble()
m.drawcoastlines(linewidth=0.5)
m.drawcountries(linewidth=0.5)
m.drawstates(linewidth=0.5)

# Creates parallels and meridians

m.drawparallels(np.arange(10.,35.,5.),labels=[1,0,0,1])
m.drawmeridians(np.arange(-120.,-80.,5.),labels=[1,0,0,1])
m.drawmapboundary(fill_color='aqua')

# Opens data file

import pandas as pd
name = [ ]
df = pd.read_csv('louisianastormb.csv')
for name, group in df.groupby([name]):
    latitude = group.lat.values
    longitude = group.lon.values …
Run Code Online (Sandbox Code Playgroud)

python csv matplotlib pandas matplotlib-basemap

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

在 spyder 中导入底图时出错

我正在尝试在 Windows 机器(64 位,Python34)上的 spyder 中导入底图,但出现以下错误:

from mpl_toolkits.basemap import Basemap
Traceback (most recent call last):

  File "<ipython-input-6-5e6824321d57>", line 1, in <module>
    from mpl_toolkits.basemap import Basemap

ImportError: No module named 'mpl_toolkits.basemap'
Run Code Online (Sandbox Code Playgroud)

我很困惑,因为我可以在 Python 的 IDLE 中很好地导入它。我只是无法在 Spyder 中导入它。有没有人有建议?提前致谢。

python windows spyder matplotlib-basemap

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

当我使用不同的绘图类型设置“vmin”和“vmax”时的不同结果

背景

用于绘制某些属性的二维空间分布,contourfpcolormesh都是可视化形式的不错选择。

由于绘图数据的实际含义,我想将零附近的值设置为白色(例如,[-0.2,0.2]);零值应该是中点

从问题 [ Defining the midpoint of a colormap in matplotlib,我尝试设置vminvmax调整颜色图。

数据导入

import pygrib
grib='fnl_20141110_12_00.grib2';
grbs=pygrib.open(grib)
grb = grbs.select(name='Vertical velocity')[8]#Vertical velocity
data=grb.values
lat,lon = grb.latlons()
Run Code Online (Sandbox Code Playgroud)

1. 等值线图

m = Basemap(llcrnrlon=110,llcrnrlat=34,urcrnrlon=122,urcrnrlat=44,projection='mill')
fig=plt.figure(figsize=(8,4))
ax1 = plt.subplot(121)
x, y = m(lon, lat)
cs = m.contourf(x,y,data,cmap=plt.cm.RdBu)

cb = m.colorbar(cs,"bottom", size="5%", pad="8%")
ax1.set_title("Original",fontsize = 15)

ax2 = plt.subplot(122)
cs = m.contourf(x,y,data,cmap=plt.cm.RdBu,vmin = -1.8,vmax =1.8)
cb = m.colorbar(cs,"bottom", size="5%", pad="8%")
ax2.set_title("symmetrical vmin & vmax",fontsize …
Run Code Online (Sandbox Code Playgroud)

python matplotlib grib matplotlib-basemap colormap

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

在 ImageGrid 中使用 basemap.pcolor 的空颜色条

以下代码生成我想要的图像,但颜色条为空白/白色,并且与数据不匹配:

def plot_array(da, ax=None, shift=True):
    """plots an array of lat by lon on a coastline map"""

    m = basemap.Basemap()
    m.drawcoastlines()
    m.pcolormesh(da.lon, y=da.lat, data=da.T, latlon=True)

    return m

# 'monthly mean' is an xarray DataArray

fig = plt.figure(0, (14, 8))
grid = ImageGrid(fig, 111, nrows_ncols=(3, 4), axes_pad=0.3,
                 cbar_mode='single', cbar_location="bottom",)
for i, m in enumerate(months):
    plt.sca(grid[i])
    plot_array(monthly_mean.sel(month=i + 1))
    plt.title(m)
plt.suptitle("{b} - {y} monthly means".format(b=benchmark, y=year))
# plt.colorbar()
plt.tight_layout()

os.makedirs("plots/monthly_means/{y}".format(y=year), exist_ok=True)
plt.savefig("plots/monthly_means/{y}/{b}_{y}.png".format(b=benchmark, y=year))
plt.close()
Run Code Online (Sandbox Code Playgroud)

空白颜色条

我还需要做些什么才能使颜色条与 ImageGrid 一起工作,还是 ImageGrid 和 Basemap 不能很好地协同工作?

python matplotlib subplot matplotlib-basemap

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

如何使用 Python 底图更快地绘制地理定位的 RGB 数据

我在使用带有纬度和经度数据的 Python 底图模块绘制 RGB 图像时遇到问题。现在,我可以制作我想要的绘图,但问题是它有多慢,因为它能够比 RGB 数据更快地绘制单通道数据,并且一般来说,单独绘制 RGB 图像也是如此快速地。由于我有纬度/经度数据,这就是事情变得复杂的地方。我已经检查了这个问题的解决方案:

如何使用 python 和底图绘制不规则间隔的 RGB 图像?

这就是我如何到达现在的位置。它本质上归结为以下问题。当在底图中使用该pcolormesh方法时,要绘制 RGB 数据,您必须定义一个 colorTuple 参数,它将逐点映射 RGB 数据。由于数组大小约为 2000x1000,因此这需要一些时间才能完成。下面是我正在谈论的内容的片段(完整的工作代码在下面):

if one_channel:
    m.pcolormesh(lons, lats, img[:,:,0], latlon=True)
else:
    # This is the part that is slow, but I don't know how to
    # accurately plot the data otherwise.

    mesh_rgb = img[:, :-1, :]
    colorTuple = mesh_rgb.reshape((mesh_rgb.shape[0] * mesh_rgb.shape[1]), 3)

    # What you put in for the image doesn't matter because of the color mapping
    m.pcolormesh(lons, lats, img[:,:,0], …
Run Code Online (Sandbox Code Playgroud)

python rgb geolocation matplotlib-basemap

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

向 matplotlib 图和轴实例添加自定义属性:不明智?

我注意到我可以将自己的属性添加到matplotlib.axes.Axes()实例中matplotlib.figure.Figure()。例如,

import matplotlib as mpl
fig = mpl.figure.Figure()
ax = fig.add_subplot()
ax.foo = 'bar'
Run Code Online (Sandbox Code Playgroud)

实际上,我可能想使用类似的方法将底图实例添加到坐标区对象

import mpl_toolkits.basemap as basemap    
ax.basemap = basemap.Basemap('mollweide', ax=ax)
Run Code Online (Sandbox Code Playgroud)

这样我就可以以更加面向对象、直观的方式添加地理特征。这是这些对象的记录/可靠特征,还是偶然?换句话说,我可以“安全”地使用它吗?

python matplotlib python-3.x matplotlib-basemap

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

带有彩色箭袋的色彩图

我正在绘制一张地图,上面有箭头。这些箭头代表风向、平均风速(每个方向)和发生情况(每个方向)。

方向由箭头的方向指示。箭头的长度表示该方向的平均风速。箭头的颜色表示该方向有风。

这一切都可以与下面的脚本配合使用:

windData = pd.read_csv(src+'.txt'), sep='\t', names=['lat', 'lon', 'wind_dir_start', 'wind_dir_end', 'total_num_data_points','num_data_points', 'avg_windspeed']).dropna()

# plot map
m = Basemap(llcrnrlon=minLon, llcrnrlat=minLat, urcrnrlon=maxLon, urcrnrlat=maxLat, resolution='i')
Left, Bottom = m(minLon, minLat)
Right, Top = m(maxLon, maxLat)

# get x y
x, y = m(windData['lon'], windData['lat'])

# angles
angleStart = -windData['wind_start']+90
angleStart[angleStart<0] = np.radians(angleStart[angleStart<0]+360.)

angleEnd = -windData['wind_end']+90
angleEnd[angleEnd<0] = np.radians(angleEnd[angleEnd<0]+360.)

angle = angleStart + math.radians(binSize/2.)

xux = np.cos(angle) * windData['avg_windspeed']
yuy = np.sin(angle) * windData['avg_windspeed']

# occurence
occurence = (windData['num_data_points']/windData['total_num_data_points'])

xi = np.linspace(minLon, maxLon, …
Run Code Online (Sandbox Code Playgroud)

python matplotlib matplotlib-basemap

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

如何避免导入底图时出现 PROJ_LIB 错误?

我尝试在 Python 中按如下方式导入底图:

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

我收到以下错误:

Traceback (most recent call last):

  File "<ipython-input-16-880204a64918>", line 2, in <module>
    from mpl_toolkits.basemap import Basemap

  File "C:\Users\bakhadher\AppData\Local\Continuum\anaconda3\lib\site-packages\mpl_toolkits\basemap\__init__.py", line 155, in <module>
    pyproj_datadir = os.environ['PROJ_LIB']

  File "C:\Users\bakhadher\AppData\Local\Continuum\anaconda3\lib\os.py", line 678, in __getitem__
    raise KeyError(key) from None

KeyError: 'PROJ_LIB'
Run Code Online (Sandbox Code Playgroud)

python python-import matplotlib-basemap conda

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

Google colaboratory中的Python底图

我曾经使用以下命令在Google colaboratory中安装libgeos和basemap,并且直到上周都可以正常工作。

!apt-get -qq install libgeos-dev
!pip install -qq https://github.com/matplotlib/basemap/archive/master.zip
from mpl_toolkits.basemap import Basemap, cm
Run Code Online (Sandbox Code Playgroud)

错误显示

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-3-f27b0fbc3a52> in <module>()
----> 1 from mpl_toolkits.basemap import Basemap, cm
      2 from matplotlib.patches import Polygon

/usr/local/lib/python3.6/dist-packages/mpl_toolkits/basemap/__init__.py in 
<module>()
150 
151 # create dictionary that maps epsg codes to Basemap kwargs.
--> 152 epsgf = open(os.path.join(pyproj.pyproj_datadir,'epsg'))
153 epsg_dict={}
154 for line in epsgf:

AttributeError: module 'pyproj' has no attribute 'pyproj_datadir'
Run Code Online (Sandbox Code Playgroud)

有谁知道如何解决?谢谢。

python matplotlib-basemap google-colaboratory

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

从以底图位置为中心的 networkx 绘制图形

我正在寻找在地图上绘制多个子图,每个子图都以一个地理位置(或绘图的一个坐标)为中心。节点本身没有位置(或者它们都属于一个城市),但每个子图对应一个本地情况。

  • 我试图为每个子图只为一个节点分配一个位置,使用“居中”选项默认绘制其余的图
  • 我试图从/sf/answers/2071804661/ 中得到启发,在一个位置上绘制一个分层图,但没有成功

    # -*- coding: utf-8 -*-
    import networkx as nx
    import pygraphviz
    import matplotlib.pyplot as plt
    from mpl_toolkits.basemap import Basemap as Basemap
    
    G1 = nx.Graph()
    G1.add_edge('a', 'b', weight=0.6)
    G1.add_edge('a', 'c', weight=0.2)
    G1.add_edge('c', 'd', weight=0.1)
    G1.add_edge('c', 'e', weight=0.7)
    G1.add_edge('c', 'f', weight=0.9)
    G1.add_edge('a', 'd', weight=0.3)
    
    G2 = nx.Graph()
    G2.add_edge('a', 'b', weight=0.9)
    G2.add_edge('a', 'f', weight=0.5)
    G2.add_edge('c', 'd', weight=0.1)
    G2.add_edge('c', 'e', weight=0.4)
    G2.add_edge('c', 'f', weight=0.2)
    G2.add_edge('a', 'd', weight=0.1)
    
    edges = G.edges()
    weights = [G[u][v]['weight'] for u,v in edges] # …
    Run Code Online (Sandbox Code Playgroud)

python networkx pygraphviz matplotlib-basemap

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