通过对等值线及风场的返回结果进行研究,我找到了一个不必重新投影地图就可将等值线及风场擦除的方法。
一、matplotlib及Basemapmatplotlib是Python常用的数据绘制包。它基于numpy的数组运算功能,可以轻易的画出各种统计图形,如散点图,条行图,饼图,等值线图等。Basemap是Matplotlib的一个子包,负责地图绘制。在数据可视化过程中,我们可以将数据在地图上画出来。
利用matplotlib及Basemap画图的基本步骤是:
创建一个figure实例在figure里创建Axes容器实例在Axes容器内创建Basemap实例进行地图投影调用Basemap实例的contour及barbs方法进行在地图上绘图二、不进行擦除操作直接绘制新的等值线或风场效果演示为了方便演示,数据为我自己手中的数据,其中为等值线的数据及坐标,为风场的数据及坐标,数据的格式及获得方法就不做过多解释
1. 绘制地图投影
我们将得到下图演示的结果
2. 绘制等值线
得到结果如下:
3. 继续绘制风场
得到结果如下:
由此我们可以看出,如果在绘制新的等值线或者风场前不进行擦除操作,所有的图像都会叠加在一起
三、通过重新进行地图投影进行擦除操作1. 绘制地图投影
我们将得到下图演示的结果
2. 绘制等值线
得到结果如下:
3. 擦除axes重新进行地图投影
得到下图结果:
4. 绘制风场
得到结果如下:
此方法虽然可以达到预期的效果,但是我们的地图投影并未做过改变,重新进行地图投影毫无意义,而且还会占用系统不必要的资源
四、对等值线实例及风场实例进行研究1. 等值线通过dir()命令我们可以查看创建的等值线实例c的属性方法
通过查看,发现在c的属性方法中并没有remove()方法,但是我们发现有一个属性是collections,这里的collections如果与Python的集合类相同,它就应该有remove()方法进删除,所以继续通过dir()命令进行查看
通过查看,发现c.collections有remove()方法,所以尝试用c.collections.remove()进行删除,由于remove()方法一次只能删除一个元素,所以要用for循环来进行删除。
得到下图结果:
由此可见,此方法可行
2. 风场通过dir()命令我们可以查看创建的等值线实例b的属性方法
可以发现风场的实例b没有remove方法,也没有collection属性,所以决定先通过type()方法看看风场实例是什么类型的
可以发现风场实例b是一个元组,所以继续看它的元素有什么属性
可以发现风场实例元组的元素自己就有remove属性,所以通过remove方法尝试一下可不可以进行风场的删除
得到下图结果:
由此可见,此方法可行
五、总结对于等值线,可以通过等值线实例的collection属性的remove方法进行删除已经绘制等值线;
对于风场,可以通过风场实例元组中个元素的remove方法进行删除已绘制风场;
对于地图上其他绘图方法,也可以通过本文的方法进行一步步的尝试。