Я работаю над некоторыми метеорологическими данными для построения контурных линий на базовой карте. Полный рабочий пример кода, который я сделал ранее, находится здесь How to remove/omit smaller contour lines using matplotlib. Все работает нормально, и я не жалуюсь на контурный сюжет. Однако есть специальный случай, когда мне приходится скрывать все контурные линии над определенной областью (нерегулярный лат & lon) на базовой карте.Как скрыть контурные линии/данные из определенной области на Базовой карте
Единственное возможное решение, которое я могу придумать, - это нарисовать линии сплайна над желаемой областью и заполнить их цветом, таким как Basemap. После многих поисков я нашел эту ссылку How to draw rectangles on a Basemap (код ниже)
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', alpha=0.4)
plt.gca().add_patch(poly)
lats = [ -30, 30, 30, -30 ]
lons = [ -50, -50, 50, 50 ]
m = Basemap(projection='sinu',lon_0=0)
m.drawcoastlines()
m.drawmapboundary()
draw_screen_poly(lats, lons, m)
plt.show()
Это, кажется, работает частично. Однако я хочу нарисовать регион, который является нерегулярным.
Любое решение оценивается.
Edit: 1
я понял, где проблема. Кажется, что любой цвет (facecolor), заполненный в области многоугольника, не скрывает ничего ниже. Всегда прозрачно только, независимо от используемого значения alpha
. Чтобы проиллюстрировать проблему, я обрезал изображение, имеющее все три области, т.е. контур, область базовой карты и область полигона. Область Polygon заполнена красным цветом, но, как вы можете видеть, контурные линии всегда видны. Конкретная линия, которую я использовал в приведенном выше коде, является: -
poly = Polygon(xy, facecolor='red', edgecolor='b')
Поэтому проблема заключается не в коде выше. Кажется, проблема с заполнением многоугольника. Но до сих пор нет решения для этой проблемы. Полученное изображение (обрезанное изображение) ниже (Смотрите мое 2-ое редактирование ниже прикрепленного изображения): -
Edit 2: Принимая ключ от этого http://matplotlib.1069221.n5.nabble.com/Clipping-a-plot-inside-a-polygon-td41950.html, который имеет аналогичное требование шахты , Я могу удалить некоторые данные. Однако удаленные данные находятся только вне области полигона, а не внутри. Вот код, который я взял ключ от: -
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import RegularPolygon
data = np.arange(100).reshape(10, 10)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.contourf(data)
poly = RegularPolygon([ 0.5, 0.5], 6, 0.4, fc='none',
ec='k', transform=ax.transAxes)
for artist in ax.get_children():
artist.set_clip_path(poly)
Теперь мой вопрос, что команда используется для удаления данных в пределах области полигона?
вручая в латах/Лон многоугольник Вершины не работает? – tacaswell
Извините за задержку. Он работает после предоставления всех лат. Тем не менее, цвет базовой карты, который я использую, является белым/нет цвета. Когда я даю цвет полигона как «белый», используя эту команду: poly = Polygon (xy, facecolor = 'white') ', то он не скрывает линии данных/контура за ним. В принципе «белый» цвет действует как прозрачный. Код работает, но проблема связана с цветом. –
Я обновил свой вопрос с помощью экрана. –