将imshow与底图配合使用:颜色和地图边框之间不匹配

如何解决将imshow与底图配合使用:颜色和地图边框之间不匹配

我正在尝试使用底图绘制一些grib数据 和imshow而不是contourf。当用contourf绘制时,我得到了适当的边界和颜色,但是当用imshow绘制时,图像和地图之间却不匹配。 使用contourf using contourf进行绘图。使用imshow using imwshow

进行绘图

我正在使用lcc投影。在文档中,我看到了一些使用圆柱投影的示例,但是在这种情况下,我也会出现不匹配的情况。 相关代码如下。

m = Basemap(llcrnrlon=-55,llcrnrlat=55.8,urcrnrlon=80,urcrnrlat=80,lat_1=72,lat_0=72.,lon_0=-36,resolution='h',projection='lcc')
x,y = m(lons,lats)

data = data - 273.15
import matplotlib as mpl
cmap = mpl.cm.RdBu_r
norm = mpl.colors.normalize(vmin=-55,vmax=15)
minVal = min(data.flatten())
maxVal = max(data.flatten())
clev = np.arange(minVal,maxVal,0.01)
#using contourf
CS_tmp = m.contourf(x,y,data,clev,cmap=plt.cm.coolwarm)
#using imshow
CS_tmp = m.imshow(data2,cmap=cmap) #,extent=extent)

我的问题是,我应该应用哪种转换 数据?我试图按照本教程 https://basemaptutorial.readthedocs.io/en/latest/utilities.html#interp 它引用了transform_scalar,这只会起作用 用于圆柱投影。

建议对非圆柱投影使用interp “当输入矩阵的经纬度不规则(即不是圆柱投影)时,由于经纬度网格不规则,因此无法正确使用此方法。有关解决方案,请参见插值示例。 “

我尝试按照那里的示例进行操作,但这没有用 而且我仍然看到不匹配

x2 = np.linspace(x[0][0],x[0][-1],x.shape[1]*2)
y2 = np.linspace(y[0][0],y[-1][0],y.shape[0]*2)
x2,y2 = np.meshgrid(x2,y2)
data_trans = interp(data,x[0],y[:,0],x2,y2,order=1)

谁能告诉我这里适当的转变是什么?

感谢您的帮助

卡洛斯

解决方法

我认为问题在于imshow图适合您图中的整个图形窗口,因为matplotlib无法从数组中获取任何坐标信息。

如果您要使用其他投影,则可以正确设置边界,但是当您使用基于极坐标的投影时,坐标的范围在纬度和经度上会高达80°。

因此,您必须将nan添加到data2数组中。

代码可能看起来像这样:

# take a raw array of zeros along longitude axes 
base_nan_array = np.zeros(len(x))

# find out how many rows must be added
n_lat_rows =len(y) - data2.shape[1]

# fill up nan array 
nan_array = np.array([base_nan_array,]*n_lat_rows)

# append to data (you have to find the direction of append on your own bc. no test data is avail.)
np.append([data2,nan_array],axis=0)

这将使您的数组覆盖底图的整个范围。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?