在python中使用matplotlib将轴范围更改为纬度和经度

在python中使用matplotlib将轴范围更改为纬度和经度,python,matplotlib,axis,latitude-longitude,Python,Matplotlib,Axis,Latitude Longitude,如何使用yaxis和xaxis,这是我想要的,并且与绘图中的数据不相关? 例如,我想使用以下代码将世界地图绘制为图像: import matplotlib.pyplot as plt fig = plt.figure() plt.imshow(world_map) 结果,我从左到右得到了xaxis:0…image\u size\u x,从上到下得到了yaxis:0…image\u size\u y。 我需要做什么才能将其轴范围更改为纬度和经度格式?因此,图形轴应包含两个字段(x和y)上的度数

如何使用yaxis和xaxis,这是我想要的,并且与绘图中的数据不相关? 例如,我想使用以下代码将世界地图绘制为图像:

import matplotlib.pyplot as plt

fig = plt.figure()
plt.imshow(world_map)
结果,我从左到右得到了xaxis:0…image\u size\u x,从上到下得到了yaxis:0…image\u size\u y。 我需要做什么才能将其轴范围更改为纬度和经度格式?因此,图形轴应包含两个字段(x和y)上的度数(从90到-90),而不考虑图形中绘制的实际数据。 背景

将图像下移90像素,并将图像的y维缩小为图像大小y/90的比例。因此,它不起作用,因为xlim/ylim可以处理图中绘制的数据。

假设(根据您的帖子)图像很好,但轴标签已关闭,请尝试使用此选项,这将手动实现轴标签:

plt.figure(1)     
ax = plt.subplot(111)
#... do your stuff
#need to figure out your image size divided by the number of labels you want
#FOR EXample, if image size was 180, and you wanted every second coordinate labeled:
ax.set_xticks([i for i in range(0,180,2)]) #python3 code to create 90 tick marks
ax.set_xticklabels([-i for i in range(-90,90,2)]) #python3 code to create 90 labels
#DO SAME FOR Y
我使用的技巧是计算出你想要多少标签(这里是90:180/2),在范围(0,imagesize)内均匀添加记号,然后手动添加标签。下面是一个通用公式:

ax.set_xticks([i for i in range(0,IMAGE_SIZE,_EVERY_XTH_COORD_LABELED)]) #python3 code to create 90 tick marks
ax.set_xticklabels([-i for i in range(-90,90,EVERY_XTH_COORD_LABELED)]) #python3 code to create 90 labels

简而言之:将
范围
关键字与
imshow
一起使用

代码:

import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subaxis(111)
ax.imshow(world_map, extent=[-180,180,-90,90], aspect='auto')
如果地图上下颠倒,请将关键字参数
origin='lower'
添加到
imshow
中。需要
aspect='auto'
使地图在两个维度上都可以独立伸缩。(其他带有
add_subaxis
的额外行只是为了使代码更面向对象,真正的关键在于关键字参数。)


如果没有为imshow提供图像的范围,它会认为您需要将每个像素集中在位置(0,0),(0,1),…,(Nx-1,Ny-1)上,然后图像范围将从(-.5,-.5)开始。

设置xticklabels
几乎总是一个坏主意。它将标签与数据分离。最好使用
FuncFormatter
。它工作得很好。但问题是我用的是a,每个20度的纬度(y维度)有不同的像素大小。所以我认为更好的方法是使用下面汤米说的东西。
import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subaxis(111)
ax.imshow(world_map, extent=[-180,180,-90,90], aspect='auto')