Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

Wind vector rotation troubles (rotate_vector)

オープン
#269 コメント 13 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

評価

難易度
4/5
見積もり時間
3〜5日
初心者へのやさしさ
30/100
issue の種類
バグ
明瞭さ
説明が足りない
活発さ
停滞
技術スタック
matplotlib, python

調査の方向性

まず、提供された Basemap の例を再現し、単一の点とスライスしたグリッド配列に対する m.rotate_vector の結果を比較します。このルーチンが、標準的でない 2 次元の緯度グリッドと不規則な観測座標をどのように処理するかを調査します。回転の動作に一貫性があるか、またはサポートされる座標の制約が明確に確立されれば完了です。

索引モデルが issue の本文から書いたものです。

説明

I am currently working with a gridded data set that has its wind vectors already in an earth-relative frame. When looking to rotate the wind vectors appropriately for plotting on a Basemap projection I've run into a strange problem where the vectors, quite simply, look rather odd. I ran a few tests with simple test points to make sure the rotate_vector routine appeared to be working correctly, and it seemed fine. But when I run a whole model output grid through the rotate_vector routine, it seems to produce wind fields which don't look quite right (see below).

windrotation

Here are some stats associated with the point that has the red star on the plot with the title 'Rotated vectors'

Lat and Lon: 39.11, -70.0144

Original U and V:     1.30,  7.14
Rotated U and V:    -1.33 , 7.13

Now note how the rotated wind at this point is aligned along the -70 meridian, which would suggest that in earth relative terms we might expect the wind components to be more along the lines of u=0 and v=7. However, judging from above that's certainly not the case.

Now, if I rotate that same vector, by itself, I get the following rotated wind:

Rotated U and V: -0.03 7.26

And see the second plot for a visual:

windrotation_1pt

It would seem desirable to have the same behavior for the single point that we have for the gridded set of winds.

The only thing special about the gridded data, that I have noticed, is that the latitudes can vary in a non-standard way with increasing x dimension, west to east (e.g. 35.5N, 34.2N, 33.1N, 36.2N, etc.). It wasn't clear if this was okay within rotate_vector. In some simple tests it didn't seem to be a problem.

It would be nice to be able to use this routine for not only a set of gridded data, but observations as well. It's worth noting that observations wouldn't necessarily be ordered in a nice, regular way given the nature that observations tend to be irregularly spaced (e.g. surface stations co-located with airports).

Unfortunately I don't have any suggestions for a solution, but am hopeful others may have an idea.

Below is the snippet of code used to generate the first plot above.

Thanks!
Jacob

import nemsio
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap

# Get the input file
f='restart_file'
nio=nemsio.nemsfile(f)

skip=25
u10=u[::skip,::skip,0]
v10=v[::skip,::skip,0]
lats=nio.lats[::skip,::skip]
lons=nio.lons[::skip,::skip]

# Create the figure
fig=plt.figure(figsize=(18, 6)) 

# Domain covers NE CONUS
llcrnrlon=-84.0
llcrnrlat=35.0
urcrnrlon=-60.0
urcrnrlat=49.0
res='l'

m = Basemap(llcrnrlon=llcrnrlon,llcrnrlat=llcrnrlat,urcrnrlon=urcrnrlon,urcrnrlat=urcrnrlat,\
          rsphere=(6378137.00,6356752.3142),\
          resolution=res,projection='lcc',\
          lat_1=25.0,lon_0=-95.0)

#The vector rotation to the Basemap projection just specified
u10_rot, v10_rot, x, y = m.rotate_vector(u10, v10, lons, lats, returnxy=True)

parallels = np.arange(-80.,90,5.)
meridians = np.arange(0.,360.,5.)

# - First sublot is without rotation
ax = fig.add_subplot(121)
ax.set_title('Without rotation')

m.drawmapboundary(fill_color='aqua')
m.fillcontinents(color='#cc9955', lake_color='aqua', zorder = 0)
m.drawcoastlines(color = '0.15')

m.drawparallels(parallels)
m.drawmeridians(meridians)

m.barbs(x, y, u10, v10, pivot='middle', barbcolor='black',zorder=10)

# - Second subplot is with rotation

ax = fig.add_subplot(122)
ax.set_title('Rotated vectors')

m.drawmapboundary(fill_color='aqua')
m.fillcontinents(color='#cc9955', lake_color='aqua', zorder = 0)
m.drawcoastlines(color = '0.15')
m.drawparallels(parallels)
m.drawmeridians(meridians)
m.barbs(x, y, u10_rot, v10_rot, 
    pivot='middle', barbcolor='black',zorder=10)

m.scatter(-70.0144,39.11,s=175,color='red',marker='*',latlon=True)
主要言語
Python
スター
817
フォーク
395
PR マージ指標
30日以内にマージされた PR はありません

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

matplotlib/basemap のほかの issue

matplotlib/basemap の issue をすべて見る

似ている issue

Python の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。