Участок только на континенте в matplotlib

Я рисую карту, используя базовую карту из matplotlib. Данные распространяются по всему миру, но я просто хочу сохранить все данные на континенте и сбросить их на океан. Есть ли способ, чтобы я мог фильтровать данные, или есть способ снова нарисовать океан, чтобы покрыть данные?

4 Solutions collect form web for “Участок только на континенте в matplotlib”

Есть метод в matplotlib.basemap: is_land(xpt, ypt)

Он возвращает значение True если заданная точка x, y (в координатах проецирования) находится над землей, в противном случае False . Определение земли основано на полигонах береговой линии GSHHS, связанных с экземпляром класса. Точки над озерами внутри земельных участков не считаются точками суши.

Для получения дополнительной информации см. Здесь .

is_land() будет зацикливать все полигоны, чтобы проверить, земля ли она. Для большого размера данных это очень медленно. Вы можете использовать points_inside_poly() из matplotlib, чтобы быстро проверить массив точек. Вот код. Он не проверяет lakepolygons , если вы хотите удалить точки в озерах, вы можете добавить себя.

Для проверки 100000 точек на моем ПК потребовалось 2,7 секунды. Если вы хотите увеличить скорость, вы можете преобразовать многоугольники в растровое изображение, но это немного сложно сделать. Скажите, пожалуйста, если следующий код недостаточно быстро для вашего набора данных.

 from mpl_toolkits.basemap import Basemap import numpy as np import matplotlib.pyplot as plt import matplotlib.nxutils as nx def points_in_polys(points, polys): result = [] for poly in polys: mask = nx.points_inside_poly(points, poly) result.extend(points[mask]) points = points[~mask] return np.array(result) points = np.random.randint(0, 90, size=(100000, 2)) m = Basemap(projection='moll',lon_0=0,resolution='c') m.drawcoastlines() m.fillcontinents(color='coral',lake_color='aqua') x, y = m(points[:,0], points[:,1]) loc = np.c_[x, y] polys = [p.boundary for p in m.landpolygons] land_loc = points_in_polys(loc, polys) m.plot(land_loc[:, 0], land_loc[:, 1],'ro') plt.show() 

Ответ HYRY не будет работать над новыми версиями matplotlib (nxutils устарел). Я создал новую версию, которая работает:

 from mpl_toolkits.basemap import Basemap import matplotlib.pyplot as plt from matplotlib.path import Path import numpy as np map = Basemap(projection='cyl', resolution='c') lons = [0., 0., 16., 76.] lats = [0., 41., 19., 51.] x, y = map(lons, lats) locations = np.c_[x, y] polygons = [Path(p.boundary) for p in map.landpolygons] result = np.zeros(len(locations), dtype=bool) for polygon in polygons: result += np.array(polygon.contains_points(locations)) print result 

Самый простой способ – использовать маскасманы basemap .

После meshgrid и интерполяции:

 from scipy.interpolate import griddata as gd from mpl_toolkits.basemap import Basemap, cm, maskoceans xi, yi = np.meshgrid(xi, yi) zi = gd((mlon, mlat), scores, (xi, yi), method=grid_interpolation_method) #mask points on ocean data = maskoceans(xi, yi, zi) con = m.contourf(xi, yi, data, cmap=cm.GMT_red2green) #note instead of zi we have data now. 
  • Массовая анимация Matplotlib
  • Более эффективно рисовать полигоны с помощью matplotlib
  • Половина мира замаскирована при использовании масок-масок в Basemap
  • Базовые карты и графики плотности
  • Контурные нерегулярные данные в полигоне
  • Регламентирование регулярных данных netcdf
  • Резервная сетка от центральных координат к внешним (то есть угловым) координатам
  • Исключить белые грани в Matplotlib / Basemap pcolor plot
  • Python и Matplotlib и аннотации с указателем мыши
  • Базовая карта Python «Утверждение не выполнено»
  • Использование базовой карты как фигуры в графическом интерфейсе Python
  •  
    Interesting Posts for Van-Lav

    jinja2 рекурсивный цикл против словаря

    Если файл Dill слишком велик для ОЗУ, есть другой способ его загрузки

    входные данные против raw_input: приложение Interactive Shell Python?

    Чтение сетевого графика из файла csv с заголовком строки и столбца

    изображение, просматриваемое через skimage.io.imread, имеет подозрительную форму

    Шаблоны Django: переопределение блоков включенных шаблонов для детей через расширенный шаблон

    Robot Framework – передача драйвера Appium в скрипт python

    Python Multiprocessing – Как передать функции kwargs?

    Как найти все элементы, содержащие слово «загрузить», используя Selenium x-path?

    Входные данные командной строки, экстремальные и карты python

    Итерация по строкам и расширение рамки данных pandas

    Как передать дополнительные аргументы пользовательской функции сортировки python

    Eclipse не может получить информацию о интерпретаторе в виртуальной среде

    Как обнаружить изменение знака для элементов в массиве numpy

    экономный парсер – ошибка, пытающаяся разобрать грамматику задания

    Python - лучший язык программирования в мире.