如何刪除地圖投影上的等值線以及風場?
通過對等值線及風場的返回結果進行研究,我找到了一個不必重新投影地圖就可將等值線及風場擦除的方法。
一、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方法進行刪除已繪制風場;
對于地圖上其他繪圖方法,也可以通過本文的方法進行一步步的嘗試。