and*_*s-h 15 matplotlib matplotlib-basemap
我正在寻找一种在Basemap上绘制填充矩形的方法.我可以使用该drawgreatcircle方法轻松绘制矩形的边缘,但我找不到实际填充这些矩形的方法(指定颜色和alpha).
And*_*raw 29
您可以直接在轴上添加matplotlib.patches.Polygon().问题是您是否希望矩形定义绘图坐标(绘图上的直线)或地图坐标(绘图中的大圆).无论哪种方式,您都可以在地图坐标中指定顶点,然后通过调用底图实例(m()在下面的示例中)将它们转换为绘图坐标,自己构建多边形,并将其手动添加到要渲染的轴.
对于在坐标坐标中定义的矩形,这是一个示例:
from mpl_toolkits.basemap import Basemap
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Polygon
def draw_screen_poly( lats, lons, m):
x, y = m( lons, lats )
xy = zip(x,y)
poly = Polygon( xy, facecolor='red', alpha=0.4 )
plt.gca().add_patch(poly)
lats = [ -30, 30, 30, -30 ]
lons = [ -50, -50, 50, 50 ]
m = Basemap(projection='sinu',lon_0=0)
m.drawcoastlines()
m.drawmapboundary()
draw_screen_poly( lats, lons, m )
plt.show()
Run Code Online (Sandbox Code Playgroud)
对于在地图坐标中定义的矩形,使用相同的方法,但在转换为绘图坐标之前在地图空间中插入线.对于每个细分市场,您必须执行以下操作:
lats = np.linspace( lat0, lat1, resolution )
lons = np.linspace( lon0, lon1, resolution )
Run Code Online (Sandbox Code Playgroud)
然后将这些地图坐标转换为绘图坐标(如上所示m()),再次使用绘图坐标创建多边形.
使用安德鲁的回答,我得到了错误
TypeError: len() of unsized object.
Run Code Online (Sandbox Code Playgroud)
但是,将 zip 转换为列表可以解决此问题。
完整代码:
from mpl_toolkits.basemap import Basemap
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Polygon
def draw_screen_poly( lats, lons, m):
x, y = m( lons, lats )
xy = zip(x,y)
poly = Polygon( list(xy), facecolor='red', alpha=0.4 )
plt.gca().add_patch(poly)
lats = [ -30, 30, 30, -30 ]
lons = [ -50, -50, 50, 50 ]
m = Basemap(projection='sinu',lon_0=0)
m.drawcoastlines()
m.drawmapboundary()
draw_screen_poly( lats, lons, m )
plt.show()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15326 次 |
| 最近记录: |