相关疑难解决方法(0)

Python:从matplotlib.pyplot.contour()中查找轮廓线

我试图为某些数据找到(但不是绘制!)轮廓线:

from pprint import pprint 
import matplotlib.pyplot 
z = [[0.350087, 0.0590954, 0.002165], [0.144522, 0.885409, 0.378515], 
     [0.027956, 0.777996, 0.602663], [0.138367, 0.182499, 0.460879], 
     [0.357434, 0.297271, 0.587715]] 
cn = matplotlib.pyplot.contour(z) 
Run Code Online (Sandbox Code Playgroud)

我知道cn包含我想要的轮廓线,但我似乎无法找到它们.我尝试了几件事:

print dir(cn) 
pprint(cn.collections[0]) 
print dir(cn.collections[0]) 
pprint(cn.collections[0].figure) 
print dir(cn.collections[0].figure) 
Run Code Online (Sandbox Code Playgroud)

无济于事.我知道cn是一个ContourSet,并且cn.collections是一个LineCollections 数组.我认为a LineCollection是一系列线段,但我无法弄清楚如何提取这些段.

我的最终目标是创建一个KML文件,在世界地图上绘制数据,以及该数据的轮廓.

但是,由于我的一些数据点很接近,而其他数据点很远,我需要构成轮廓的实际多边形(线串),而不仅仅是轮廓的光栅化图像.

我有点惊讶qhull不做这样的事情.

使用Mathematica ListContourPlot然后导出为SVG工作,但我想使用开源的东西.

我不能使用众所周知的CONREC算法,因为我的数据不在网格上(对于给定的x值,并不总是有多个y值,反之亦然).

该解决方案不需要python,但必须是Linux上的开源和可运行的.

python numpy spatial matplotlib contour

19
推荐指数
2
解决办法
1万
查看次数

重新定期的netcdf数据

我有一个包含全球海面温度的netcdf文件.使用matplotlib和Basemap,我已设法使用以下代码制作此数据的映射:

from netCDF4 import Dataset
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap

filename = '/Users/Nick/Desktop/SST/SST.nc'
fh = Dataset(filename, mode='r')

lons = fh.variables['LON'][:]
lats = fh.variables['LAT'][:]
sst = fh.variables['SST'][:].squeeze()

fig = plt.figure()

m = Basemap(projection='merc', llcrnrlon=80.,llcrnrlat=-25.,urcrnrlon=150.,urcrnrlat=25.,lon_0=115., lat_0=0., resolution='l')

lon, lat = np.meshgrid(lons, lats)
xi, yi = m(lon, lat)

cs = m.pcolormesh(xi,yi,sst, vmin=18, vmax=32)

m.drawmapboundary(fill_color='0.3')
m.fillcontinents(color='0.3', lake_color='0.3')
cbar = m.colorbar(cs, location='bottom', pad="10%", ticks=[18., 20., 22., 24., 26., 28., 30., 32.])
cbar.set_label('January SST (' + u'\u00b0' + 'C)') …
Run Code Online (Sandbox Code Playgroud)

python numpy matplotlib matplotlib-basemap

2
推荐指数
1
解决办法
8666
查看次数