我不确定如何在Python中绘制shapefile中的虚线。看来readshapefile()没有任何linestyle供我设置。下面我有一个工作代码,我在其中获取shapefile并绘制它,但它只绘制一条实线。有什么想法让我朝着正确的方向前进?谢谢!
shapefile可以在这里找到:http://www.natice.noaa.gov/products/daily_products.html,其中开始日期是2月15日,结束日期是2月17日,日期类型是冰边缘。它应该是第一个链接。
#!/awips2/python/bin/python
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
map = Basemap(llcrnrlon=-84.37,llcrnrlat=42.11,urcrnrlon=-20.93,urcrnrlat=66.48,
resolution='i', projection='tmerc', lat_0 = 55., lon_0 = -50.)
map.drawmapboundary(fill_color='aqua')
map.fillcontinents(color='#ddaa66',lake_color='aqua')
map.drawcoastlines(zorder = 3)
map.readshapefile('nic_autoc2018046n_pl_a', 'IceEdge', zorder = 2, color = 'blue')
plt.show()
答案 0 :(得分:1)
来自Basemap文档:
默认情况下,包含形状文件信息的元组(num_shapes,type,min,max)是 回。 num_shapes是形状的数量,type是类型代码 (shapelib模块中定义的SHPT *常量之一,请参阅 http://shapelib.maptools.org/shp_api.html)和最小值和最大值 具有顶点最小值和最大值的4元素列表。 如果drawbounds = True,则表示matplotlib.patches.LineCollection对象为 附加到元组。
drawbounds
为True
,因此您只需收集readshapefile
的返回值并更改返回的linestyle
的{{1}}对象,可以使用LineCollection
完成。因此,原则上您可以使用以下内容更改绘制的形状文件的线型:
LineCollection.set_linestyle()
但是,您的result = m.readshapefile('shapefiles/nic_autoc2018046n_pl_a', 'IceEdge', zorder = 10, color = 'blue')#, drawbounds = False)
col = result[-1]
col.set_linestyle('dotted')
plt.show()
包含5429个不同长度的单独线段,不知何故,matplotlib似乎无法处理大量非连续线。至少在我的机器上,绘图没有在一小时内完成,所以我打断了这个过程。我用你的文件玩了一下,似乎很多线都被分成了不必要的部分(我猜这是因为冰盖的轮廓以某种方式确定在瓷砖上,然后拼凑在一起,但只有供应商会真的知道)。也许它可以帮助拼凑相邻的部分,但我不确定。
我也想知道结果是否会用虚线看起来很棒,因为有很多尖锐的弯道。下面我展示了一张图片,其中我只使用以下代码绘制了100个最长的线段(省略shapefile
和更粗的线条):
drawcoastlines
结果如下: