- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我无法从 GFS 数据的 metpy.calc 中绘制 Q 向量;应用 ax.set_extent
和 ax.quiver
计算代码:
import metpy.calc as mpcalc
query.variables('Temperature_isobaric', 'Geopotential_height_isobaric',
'u-component_of_wind_isobaric', 'v-component_of_wind_isobaric')
data = subset_access.get_data(query)
lat = data.variables['lat'][:]
lon = data.variables['lon'][:]
press = data.variables['isobaric'][:] * units.Pa
# Make the pressure same dimensions as the temperature and winds
pressure_for_calc = press[:, None, None]
temperature = data.variables['Temperature_isobaric'][0] * units.kelvin
u = data.variables['u-component_of_wind_isobaric'][0] * units.meter /
units.second
v = data.variables['v-component_of_wind_isobaric'][0] * units.meter /
units.second
dx, dy = mpcalc.lat_lon_grid_deltas(lon, lat)
现在我试图通过 q-vector 函数运行 dx 和 dy:
Q = mpcalc.q_vector(u,v,temperature,pressure_for_calc,dx,dy)
但我收到一个错误,我认为与 dx 和 dy 维度有关:
IndexError: too many indices for array
dx.shape, dy.shape
>>> ((101, 160), (100, 161))
好吧,那显然是个问题;我每个都需要一个一维数组,所以我探测了温度数组的形状:
print(temperature.shape)
>>> (31, 101, 161)
所以我尝试取 dx 和 dy 的一个子集:
print(dx[:,0].shape, dy[0,:].shape)
>>> (101,) (161,)
然后我认为这应该与 temp 和 press 数组对齐,我根据这些子集再次尝试计算:
Q = mpcalc.q_vector(u,v,temperature,pressure_for_calc,dx[0,:],dy[:,0])
没有错误,现在感觉很好。检查我假设为 x 和 y 分量的 Q 的维度:
print(Q[0].shape, Q[1].shape)
>>> (31, 101, 161)
>>> (31, 101, 161)
好像在排队...
但是,当我查看经纬度的尺寸时:
lat.shape, lon.shape
>>> ((101,), (161,))
从dx和dy的形状来看好像倒过来了?
我是不是遗漏了什么,或者我只是在计算 Q 向量时完全错了?这是我的第一次尝试,我不确定我所做的事情是否正确。
当我尝试用 ax.quiver
绘图代码:
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.feature as cfeature
# Set Projection of Data
datacrs = ccrs.PlateCarree()
# Set Projection of Plot
plotcrs = ccrs.LambertConformal()
# Add Map Features
states_provinces = cfeature.NaturalEarthFeature(category='cultural',
name='admin_1_states_provinces_lakes',scale='50m', facecolor='none')
country_borders = cfeature.NaturalEarthFeature(category='cultural',
name='admin_0_countries',scale='50m', facecolor='none')
# Lat/Lon Extents [lon0,lon1,lat0,lat1]
extent = [-130., -70, 20., 60.]
# Create a plot
fig = plt.figure(figsize=(17., 11.))
# Add the map
ax = plt.subplot(111, projection=plotcrs)
# Add state boundaries to plot
ax.add_feature(states_provinces, edgecolor='k', linewidth=1)
# Add country borders to plot
ax.add_feature(country_borders, edgecolor='black', linewidth=1)
lon_slice = slice(None, None, 8)
lat_slice = slice(None, None, 8)
ax.quiver(lon[lon_slice],lat[lat_slice],Q[0][0,lon_slice,lat_slice], Q[1][0,lon_slice,lat_slice],
color='k',transform=plotcrs)
ax.set_extent(extent, datacrs)
plt.show()
生成的 map :
当我省略 ax.set_extent
时,它似乎绘制了 Q 向量,只是现在没有 map 背景...
所以我想我的两个问题是:
1) 我是否根据 GFS 数据适本地计算了 Q 向量?
2) 我在绘图中缺少什么?
最佳答案
所以我认为您正确计算了 Q 向量,但有一个更简单的解决方案。发生错误是因为您正在传递 dx
和 dy
的二维数组,但您的字段 temperature
和 pressure_for_calc
是 3D . NumPy 不知道它应该为每个高度级别重复 dx 和 dy。您可以在不进行子集化的情况下完成此操作:
Q = mpcalc.q_vector(u, v, temperature,pressure_for_calc, dx[None, :], dy[None, :])
这样做是插入一个大小为 1 的维度作为 dx
和 dy
的第一个维度,而其余维度不受影响。这允许一切与其他阵列正确对齐。
就绘图而言,这是一个经典的 CartoPy 问题。您对 quiver
的调用应该如下所示:
ax.quiver(lon[lon_slice], lat[lat_slice],
Q[0][0,lon_slice,lat_slice].m, Q[1][0,lon_slice,lat_slice].m,
color='k', transform=ccrs.PlateCarree())
注意要传递 transform=ccrs.PlateCarree()
的更改。这是告诉 CartoPy 您传递给 quiver 的数据在经度/纬度坐标系中的方法。这还假设您正在绘制的矢量在此坐标系中被正确引用——它们应该是因为您通过了 dx
,dy
从 mpcalc.lat_lon_grid_deltas( )
。请注意,在这种情况下,由于 CartoPy 将对向量进行一些重新投影,因此您需要使用 .m
来删除单位。
关于metpy - 绘制 MetPy Q 向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55518155/
我学习 SDL 二维编程已有一段时间了,现在我想创建一个结合使用 SDL 和 OpenGL 的程序。我是这样设置的: SDL_Init(SDL_INIT_VIDEO); window = SDL_Cr
尝试查找可在地块中使用的不同类型项目的列表 来自不同样本的投影类型: projection = list(type = "equirectangular") projection = list(typ
我正在尝试使用 Java Graphics API 绘制 GIF,但无法使用下面的代码成功绘制 GIF。仅绘制 GIF 的第一张图像或缩略图,但不播放。 public void paintCompon
我目前正在使用 JFrame 并尝试绘制一个矩形,但我不知道如何执行代码 paint(Graphics g),如何获取 Graphics 对象? package com.raggaer.frame;
这个领域的新手,希望得到一些帮助。 我有一个"Missile.java" 类,我在那里画东西。我想绘制一个 ImageView,我正在使用以下代码: ImageView v = (ImageView)
下面列出了圆形的例子 这是我的 JavaScript 代码。 最佳答案 假设您的 randomColor 是正确的,您只需要: 从 canvas.onclick 中移除 context.clearR
我在绘制和缩放 ImageView 时遇到问题。请帮帮我.. 当我画一些东西然后拖动或缩放图像时 - 绘图保留在原处,如您在屏幕截图中所见。而且我只需要简单地在图片上绘图,并且可以缩放和拖动这张图片。
我们可以在形式之外绘制图像和文本...我的意思是在字面上... 我知道问这个问题很愚蠢但是我们能不能... 最佳答案 您可以通过创建表单并将其 TransparentColor 属性设置为背景色来“作
我在绘制/布局期间收到 3 个对象分配警告 super.onDraw(canvas); canvas.drawColor(Color.WHITE); Paint textPaint = new Pai
我有一个示例时间序列数据框: df = pd.DataFrame({'year':'1990','1991','1992','1993','1994','1995','1996',
我试图想出一种简洁的方法来绘制 R 数据框中所有列的 GridView 。问题是我的数据框中既有离散值又有数值。为简单起见,我们可以使用 R 提供的名为 iris 的示例数据集。我会使用 par(mf
我有一个由 10 列和 50 行组成的 data.frame。我使用 apply 函数逐列计算密度函数。现在我想绘制我一次计算的密度。 换句话说,而不是绘图... plot(den[[1]]) plo
我想知道我们如何才能在第一个和第二个组件之外绘制个人,如下所示: 最佳答案 这可能有效: pc.cr <- princomp(USArrests, cor = TRUE) pairs(pc.cr$lo
我是Pandas和matplotlib的新手,想绘制此DataFrame season won team matches pct_won 0 20
我正在尝试为 distplot 子图编写一个 for 循环。 我有一个包含许多不同长度列的数据框。 (不包括 NaN 值) fig = make_subplots( rows=len(asse
我想创建一个具有密度的 3d 图。 我使用函数 density 首先为特定的 x 值创建一个二维图,然后该函数创建密度并将它们放入 y 变量中。现在我有第二组 x 值并将其再次放入密度函数中,然后我得
全部, 我一直在研究全局所有 MTB 步道的索引。我是 Python 人,所以对于所有涉及的步骤,我都尝试使用 Python 模块。 我能够像这样从 OSM 立交桥 API 中获取关系: from O
我正在使用 e1071 包中的支持向量机对我的数据进行分类,并希望可视化机器实际如何进行分类。但是,在使用 plot.svm 函数时,出现无法解决的错误。 脚本: library("e1071") d
我制作了以下图表,它是使用 xts 对象创建的。 我使用的代码很简单 plot(graphTS1$CCLL, type = "l", las = 2, ylab = "(c)\nCC for I
在绘制状态图时,您如何知道哪些状态放在框中,哪些状态用于转换箭头?我注意到转换也是状态。 我正在查看 this page 上的图 1 : 最佳答案 转换不是状态。转换是将对象从一种状态移动到下一种状态
我是一名优秀的程序员,十分优秀!