如何在python中绘制shapefile中的虚线?

时间:2018-02-23 13:42:03

标签: python matplotlib shapefile matplotlib-basemap linestyle

我不确定如何在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()

1 个答案:

答案 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对象为   附加到元组。

默认情况下,

drawboundsTrue,因此您只需收集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

结果如下:

result of second code patch