我有一个中等大小的数组(例如1500x3000)我想要按比例绘制,因为它是一个图像.但是,垂直和水平刻度是非常不同的.为简化起见,假设有一米/行和10 /列.然后该图应该产生一个c的图像.1500x30000.我使用kwarg范围为scale和aspect = 1以避免变形.通过使用绘图窗口(QT4)和imshow()或使用savefig(),我从未成功地以大规模和全分辨率生成图像.
我看过很多提出的解决方案,如表示在这里,在这里,或在这里和那里或存在的情况下,这是一个错误.我已经改变了我的matplotlibrc并将其放在〜/ .config/matplotlib中以尝试强制我的display/savefig选项但无济于事.我也试过pcolormesh()但没有成功.我使用来自Ubuntu 14.04和QT4Agg的repo的python 2.7和matplotlib 1.3作为后端.我也尝试了TkAgg,但速度很慢并且给出了相同的结果.我的印象是,在x轴上分辨率是正确的,但它在垂直方向上肯定是下采样的.这是一段应该模拟我的问题的代码.
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors
R, C = 1500, 3000
DATA = np.random.random((R, C))
DATA[::2, :] *= -1 # make every other line negative
Yi, Xi = 1, 10 # increment
CMP = 'seismic'
ImageFormat ='pdf'
Name = 'Image'
DataRange = (np.absolute(DATA)).max() # I want my data centred on 0
EXTENT = [0, Xi*C, 0 ,Yi*R] …Run Code Online (Sandbox Code Playgroud) 我已经看了很多interp 函数的 xarray 文档,但我无法真正理解它。我看到这是一个重新投影,但它并不真正适合真实的案例。他们是否有人可以理解它,例如通过将这个数据集重新投影到 webmercator 数据上?
import xarray as xr
from pyproj import Transformer
ds = xr.tutorial.open_dataset("air_temperature").isel(time=0)
fig, axes = plt.subplots(ncols=2, figsize=(10, 4))
lon, lat = np.meshgrid(ds.lon, ds.lat)
shp = lon.shape
# reproject the grid
gcs_to_3857 = Transformer.from_crs(4326, 3857, always_xy=True)
x, y = gcs_to_3857.transform(lon.ravel(), lat.ravel())
# future index for a regular raster
X= np.linspace(x.min(), x.max(), shp[1])
Y= np.linspace(y.min(), y.max(), shp[0])
data["x"] = xr.DataArray(np.reshape(x, shp), dims=("lat", "lon"))
data["y"] = xr.DataArray(np.reshape(y, shp), dims=("lat", "lon"))
Run Code Online (Sandbox Code Playgroud)
应该是类似的东西ds.interp(x=X,y=Y),但数组是在经纬度上索引的
这对我来说有点令人困惑......