- 积分
- 1819
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2013-8-24
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 lovechang1314 于 2014-8-17 21:47 编辑
前几天在查找有关python绘图能够剪切出来固定区域的方法,在论坛看到一个帖子讲用cartopy很容易实现,也讲了另外一种方法,但是我没有调试通过。
网址:http://bbs.06climate.com/forum.php?mod=viewthread&tid=24966&page=1#pid302732
今天无聊有看了一下matplotlib的文档,觉得我找到原因了,可能跟用meteoinfo得到的txt即经纬度信息有关,这个经纬度信息并不是最外围的点组成的,应该还有一些点是在最外围边界的内部,所以会出现这样的情况。
另外仅仅set_clip_path(us_path)貌似不行,总是会出错,我用另外的一个方法实现了clip:
path = Path(data) #data就是帖子里面zip(x,y)
patch = PathPatch(path, facecolor='none')
#print path
plt.gca().add_patch(patch) #画出边界
cs = plt...... #绘图
cs.set_clip_path(patch)
---------------------------附带一个从matplotlib 的gallery里面随便找了一个例子,然后截取北京区域内的颜色
import matplotlib.pyplot as pltfrom matplotlib.colors import BoundaryNorm
from matplotlib.ticker import MaxNLocator
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.path import Path
from matplotlib.patches import PathPatch
# make these smaller to increase the resolution
dx, dy = 0.05, 0.05# generate 2 2d grids for the x & y bounds
y, x = np.mgrid[slice(39., 42 + dy, dy),
slice(115., 119 + dx, dx)]
z = np.sin(x) ** 10 + np.cos(10 + y * x) * np.cos(x)
# x and y are bounds, so z should be the value *inside* those bounds.# Therefore, remove the last value from the z array.
z = z[:-1, :-1]levels = MaxNLocator(nbins=15).tick_values(z.min(), z.max())
# pick the desired colormap, sensible levels, and define a normalization# instance which takes data values and translates those into levels.
cmap = plt.get_cmap('PiYG')
norm = BoundaryNorm(levels, ncolors=cmap.N, clip=True)
im = plt.pcolormesh(x, y, z, cmap=cmap, norm=norm)
plt.colorbar()# set the limits of the plot to the limits of the data
plt.axis([x.min(), x.max(), y.min(), y.max()])
# read the boundary file
data = np.loadtxt(r'e:\test2\bj_boundary.txt')
path = Path(data)
patch = PathPatch(path, facecolor='none')
#print path
plt.gca().add_patch(patch)
im.set_clip_path(patch)plt.show()
结果:
未clip(1.jpg)clip后(3.jpg)
这样虽然可以clip一个区域,但是还有一些疑惑的地方,大家一起讨论一下。。
我把上面程序一行patch = PathPatch(path, facecolor='none')注释掉却出现这种情况(2.jpg)。
绘图方法用contourf或者contour等绘图还没有测试,不过估计原理是一样的,应该也可以调试通过吧。有愿意试一下的可以尝试一下
|
评分
-
查看全部评分
|