从Matplotlib.pcolormesh()图中提取颜色数据以转换为.kml或其他格式

时间:2018-07-23 21:07:44

标签: python matplotlib gis kml google-earth

我有一个程序可以在各种地图软件(例如Google Earth和Leaflet)上绘制数据。

我需要表示一个数据集,该数据集以numpy数组的形式存储在Google Earth上,并使用正方形多边形作为相应kml文件中的数据格式。

Pcolormesh产生一个彩色正方形网格。此外,它允许您提取每个正方形的顶点的坐标。如果然后将它们输入到simplekml库的多边形制作器中,它将很好用,只有我无法弄清楚如何从matplotlib中提取颜色数据并将其传递给我正在创建的对象。我一直在尝试从文档中找出答案。

这是我到目前为止所拥有的。该示例使用Cartopy,但我相信只有matplotlib引起了我的问题。

import matplotlib as mpl
mpl.use('Agg')
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
from cartopy.examples.waves import sample_data
import pdb
import simplekml

ax = plt.axes(projection=ccrs.Robinson())

ax.set_global()

lons, lats, data = sample_data(shape=(20, 40))

default_cmap = 'RdBu_r'

def make_path_polygons(mesh):
    kml = simplekml.Kml()
    paths = mesh.get_paths()
    for path in paths:
        kml.newpolygon(name="newpoly", outerboundaryis=path.vertices)
        #NEED TO SET COLOR HERE
    kml.save("gridpaths.kml")

mesh = plt.pcolormesh(lons, lats, data, transform=ccrs.PlateCarree(), cmap=default_cmap)
print(mesh.get_facecolors()) #Result: array([[0.1215, 0.4667, 0.7058]]), I would have hoped this returned a sequence corresponding to the coordinate data, but seems it does not
make_path_polygons(mesh)

ax.coastlines()
ax.gridlines()

plt.savefig("pcm.png")

这是我的matplotlib图: This is what my mpl plot looks like if I save the figure

这是Google Earth中的.kml: And this is how it appears in Google Earth

我理解GE结果为何是无色的,因为现在我仅将坐标数据传递给simplekml,而没有其他任何传递。但是如何从mpl.QuadMesh对象中获取数据呢?任何帮助将不胜感激,谢谢。

1 个答案:

答案 0 :(得分:0)

应通过array的{​​{1}}获得完整的颜色信息,以及正在使用的颜色图和规范。

QuadMesh