Я уже некоторое время пытаюсь построить векторное поле с эллипсами неопределенности в Cartopy. Идея состоит в том, что если у меня есть местоположение (широта / долгота) и вектор (например, скорость ветра), но этот вектор имеет неопределенность (измеренную, например, в стандартном отклонении), то я бы хотел построить эллипсы вокруг кончика стрелки, указывающей на эту неопределенность. В GMT psvelo
добивается цели, моя цель - примерно так .
Это тот же вопрос, который был задан ранее здесь - я открывая его снова, потому что я думаю, что если кто-то может помочь мне лучше понять преобразования, и я смогу найти расположение кончика стрелки, я сам смогу построить эллипс ошибки. Кроме того, некоторые функции Matplotlib / Cartopy могли измениться за последние 4 года.
Итак, вот что я попробовал:
Создание карты с использованием колчана для построить векторы, а затем попытаться получить доступ к какому-либо параметру масштаба в возвращенном объекте Quiver
. Я не смог найти ничего полезного, и хотя атрибут scale
выглядел так, как будто это было бы правильно, оказалось, что он никогда не будет установлен, если я сам его не установлю.
Если я сам установлю масштабирование, я не знаю, как это сделать, если мое местоположение и вектор имеют разные единицы измерения, и оба, очевидно, не связаны с шириной оси. Например, если я решил, что хочу иметь вектор длиной 50 м / с при 10 ° E, 40 ° N, равный определенной части ширины оси, каким будет мой параметр scale
? Испытание случайных комбинаций преобразований не дало никаких результатов. (Идея здесь в том, что если я смогу выяснить это отношение, то я на шаг ближе к знанию, куда поместить эллипс.)
Я пытался выяснить quiver
автоматически масштабируется, чтобы увидеть, как я могу «предсказать», что он собирается делать внутри, а затем использовать это, чтобы узнать, где находится наконечник стрелки. К сожалению, это не так просто, как вариант Matlab , поэтому я тоже потерпел неудачу.
Наконец, я также не понимаю, почему я не могу используйте cartopy.crs.Geodetic()
в качестве моей исходной системы координат. Ошибка, которую я получаю: invalid transform: Spherical quiver is not supported - consider using PlateCarree/RotatedPole.
Из прочтения документации Cartopy, разве это не подходит, если местоположение моего вектора измеряется по широте, долготе и высоте?
Вот MWE :
# imports
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
# data
lon, lat = np.array([10, 10.5]), np.array([40, 40])
east, north = np.array([0, 50]), np.array([50, 0])
# map
fig, ax = plt.subplots(subplot_kw={"projection": ccrs.Mercator()})
ax.set_extent([7, 13, 38, 42], ccrs.Geodetic())
ax.coastlines("50m")
q = ax.quiver(lon, lat, east, north, transform=ccrs.PlateCarree())
plt.show()
Я действительно считаю, что это особенность, которую должна иметь Cartopy, так как это одно из самых больших препятствий, с которыми я столкнулся при использовании Python для геонаучных приложений. В настоящее время единственный известный мне подход - это написать файл сценария GMT из моей Python программы и запустить GMT с системным вызовом Python, и это действительно очень неприятно.
Я знаю, что GMT разрабатывает свой собственный Python интерфейс , но они даже не вобрали в себя все основные функции c, поэтому никто не догадывается, когда они доберутся до psvelo
...
Спасибо за вашу помощь и советы,
PBB