Я работаю с некоторыми данными о погоде для построения контурных линий на базовой карте с использованием 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. Рабочий пример кода ниже: -Как удалить контур/путь внутри ploygon на базовой карте с помощью matplotlib?
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()
Приведенный выше код дает мне сюжет ...
Сюжет абсолютно нормально. Но я хотел бы скрыть/удалить контурные линии над определенной областью. Итак, я нарисовал многоугольник поверх базовой карты и попытался скрыть данные под полигоном. Код, который я использовал для этого, выглядит следующим образом: -
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. Наконец, чип от области многоугольника.
Мое сознание не выходит за рамки вышеперечисленных идей. Любое решение для решения этой проблемы высоко ценится.
спасибо. Это сработало. Однако у меня также есть «clabel» для каждой линии контура. нет никакого эффекта на zorder на 'clabel'. Любая идея удалить это тоже? –
@sundar_ima Вероятно, это проблема с чем-то на вашей кодовой последовательности, так как я не могу воспроизвести вашу проблему. Как вы видите в моем отредактированном столбце, метки находятся ниже прямоугольника. – armatita
Тант отлично работал. Большое спасибо. Принимая ваш ответ. –