Управление и нанесение данных на график

1

Я знаю, что этот вопрос задан раньше, однако он фокусируется на Cartopy.

Моя текущая работа рассматривает феномен над датой и будет работать над ящиком в Тихоокеанском океане, который пересекает дату. Управление и построение этих данных было проблемой, так как значения варьировались от 179 до -179 по одному индексу.

Я могу легко подобрать мои широты

lat_mask=[(lat<=20)&(lat>=-20)]  #Tropics +-20* only
lat_masked=lat[lat_mask]

Что хорошо работает.

lon=np.add(lon,180)  #Reset longitudes to 0-360 from -180 to 180
lon_mask=[(lon>=110)&(lon<=300)]  

также отлично работает... НО для абсолютно противоположного региона, на который я смотрю. Но регион, который я хочу:

lon_mask=[(lon<=110)|(lon>=300)]  

не работает. Я могу делать их отдельно и составлять графики для каждого региона на восток и запад от даты, но я хочу, чтобы они объединены в один набор данных/график. Так что у меня есть маска для [300-360 0-110], которую я могу построить как одно изображение.

Я ищу умный способ хранения информации для удобства и планируемости.

Я пытался разобраться, как переиндексировать все это, но у меня болит голова. Я ищу надежное решение, так как оно будет использоваться регулярно. Первоначально я думал, что это проблема matplotlib, но я думаю, что это способ хранения моих данных.

EDIT: Изменен и | - но теперь эта проблема возникает.

Я чувствую

lon= np.roll(lon,len(lon)/2)

или что-то могло бы помочь эффективно перемещать дату в другое место, но я не могу это решить.

ура

Теги:
numpy

2 ответа

0
Лучший ответ

Используется XArray:

    dataset= dataset.assign_coords(lon=(dataset.lon % 360)).roll(lon=(dataset.dims['lon'] // 2))        
0

lon_mask=[(lon<=110)|(lon>=300)] - это то, что вы хотите. Долгота либо меньше 110, либо больше 300. Разумеется, число не может быть меньше 110 и больше 300 одновременно.

  • 0
    Ах, хороший! Сунул меня. Изменено на | вместо того, чтобы & но иметь результирующую проблему видно на изображении. Задом наперед! Мне нужно 300-360, 0-110 как-то.
  • 0
    Просто добавьте еще две проверки условий: ((lon>=0)&(lon<=110))|((lon>=300)&(lon<=360)
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню