【发布时间】:2016-04-13 01:03:39
【问题描述】:
我正在处理一些天气数据,以使用 matplotlib 在底图上绘制等高线。我用过的数据(x、y和数据)在这里上传http://www.mediafire.com/download/0epjjdm8auit611/mslp.txt 这里http://www.mediafire.com/download/1dn6p8nw96h2mmd/xlong.txt 在这里http://www.mediafire.com/download/31suzsz6j7u2bgz/xlat.txt。 工作示例代码如下:-
from mpl_toolkits.basemap import Basemap
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Polygon
m = Basemap(projection='merc', llcrnrlat=7, urcrnrlat=40,
llcrnrlon=68, urcrnrlon=110, resolution='l')
x = np.loadtxt('xlong.txt', delimiter=',')
y = np.loadtxt('xlat.txt', delimiter=',')
Z = np.loadtxt('mslp.txt', delimiter=',')
x, y = m(x, y)
CS = plt.contour(x, y, Z, colors='b')
plt.show()
上面的代码给了我下面的情节......
剧情绝对OK。但我想隐藏/删除特定区域的轮廓线。因此,我在底图上绘制了一个多边形,并试图将数据隐藏在多边形下方。我用来做的代码如下:-
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')
plt.gca().add_patch(poly)
lats = [30, 35, 35, 30]
lons = [80, 80, 90, 90]
m = Basemap(projection='merc', llcrnrlat=7, urcrnrlat=40,
llcrnrlon=68, urcrnrlon=110, resolution='l')
x = np.loadtxt('xlong.txt', delimiter=',')
y = np.loadtxt('xlat.txt', delimiter=',')
Z = np.loadtxt('mslp.txt', delimiter=',')
x, y = m(x, y)
CS = plt.contour(x, y, Z, colors='b')
draw_screen_poly(lats, lons, m)
plt.show()
生成的图像如下所示。如您所见,facecolour 没有任何效果,因为它不会隐藏其下方的任何数据。
我想要做的是要么删除穿过这个多边形的轮廓线,要么使用图像处理技术隐藏/剪辑多边形区域。
我想到的解决办法是:-
1.将一些白色应用到多边形区域,使其与底图颜色匹配并隐藏数据(这已在上面的示例中完成,但不起作用)。
2。遍历轮廓集合中的每个轮廓,并检查它是否穿过多边形区域。最后将其从情节中删除。
3.最后,切掉多边形区域。
我的想法并没有超越上述想法。非常感谢任何解决此问题的解决方案。
【问题讨论】:
标签: matplotlib matplotlib-basemap