在不影响绘图的情况下更改刻度标签

Changing tick labels without affecting the plot

我正在使用 matplotlib 在 python 中绘制一个二维数组,但在格式化刻度线时遇到了问题。所以首先,我的数据目前被组织为一个二维数组(海拔,纬度)。我正在绘制电子密度值作为高度和纬度的函数(基本上是特定时间的纵向切片)。

我想用 30 度的间隔标记从 -90 到 90 度的 x 轴,并用另一个高程数组标记 y 值(每个模型 运行 都有不同的高程值,所以我不能手动分配任意高程)。我有包含纬度值的数组和另一个包含高程值的数组,这两个数组都是一维数组。

这是我的代码:

from netCDF4 import Dataset
import numpy as np
import matplotlib.pyplot as plt

#load the netcdf file into a variable
mar120="C:/Users/WillEvo/Desktop/sec_giptie_cpl_mar_120.nc"

#grab the data into a new variable
fh=Dataset(mar120,mode="r")

#assign model variable contents to python variables
lons=fh.variables['lon'][:]
lats=fh.variables['lat'][:]
var1=fh.variables['UN'][:]

#specifying which time and elevation to map
ionst=var1[0,:,:,21]
ionst=ionst[0:len(ionst)-1]

#close the netCDF file
fh.close()

#Set the figure, size, and resolution
plt.figure(figsize=(8,6), dpi=100, facecolor='white')
plt.subplot(1,1,1)

plt.imshow(ionst, origin='lower', interpolation='spline16')

plt.xticks([-90, -60, -30, 0, 30, 60, 90])  
plt.show()

如果我不包含 plt.xticks 参数,我会得到以下好的图像,但刻度标签不正确:

如果我包含 plt.xticks 参数,我会得到以下结果:

我该如何解决这个问题?我希望数据跟随轴的变化(但要准确)。我还需要为 y 轴执行此操作,但无需手动输入值,而是提供一组值。谢谢

使用imshowextent参数设置图像的x和y范围,使用aspect='auto'允许调整图像的纵横比以适合图。比如下面的代码

In [68]: from scipy.ndimage.filters import gaussian_filter

In [69]: np.random.seed(12345)

In [70]: a = np.random.randn(27, 36)

In [71]: b = gaussian_filter(a, 4)

In [72]: ymin = 0

In [73]: ymax = 1

In [74]: plt.imshow(b, origin='lower', extent=[-90, 90, ymin, ymax], aspect='auto')
Out[74]: <matplotlib.image.AxesImage at 0x1115f02d0>

In [75]: plt.xticks([-90, -60, -30, 0, 30, 60, 90])
Out[75]: 
([<matplotlib.axis.XTick at 0x108307cd0>,
  <matplotlib.axis.XTick at 0x1101c1c50>,
  <matplotlib.axis.XTick at 0x1115d4610>,
  <matplotlib.axis.XTick at 0x1115f0d90>,
  <matplotlib.axis.XTick at 0x1115ff510>,
  <matplotlib.axis.XTick at 0x11161db10>,
  <matplotlib.axis.XTick at 0x111623090>],
 <a list of 7 Text xticklabel objects>)

生成此图: