首页 文章

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

提问于
浏览
0

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

import matplotlib.pyplot as plt

fig = plt.figure()
plt.imshow(world_map)

结果,我得到了xaxis:0 ... image_size_x从左到右,yaxis:0 ... image_size_y从上到下 . 我需要做些什么才能将其轴范围更改为纬度和经度格式?因此,无论图中绘制的实际数据是什么,图形轴都应包含两个字段(x和y)的度数(从90到-90) . 设置

pylab.ylim([90,-90])

将图像移动到底部90像素,并将图像的y维度减小到image_size_y / 90的比例 . 所以它不起作用,因为xlim / ylim处理数据,如图所示 .

2 回答

  • 0

    假设(基于你的帖子)图像很好但是轴标签关闭了,试着玩这个,这将手动实现轴标签:

    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
    
  • 0

    简而言之:将 extent 关键字与 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')
    

    如果您的 Map 是颠倒的,请将关键字参数 origin='lower' 添加到 imshow . 需要 aspect='auto' 才能使 Map 在两个维度上独立展开 . ( add_subaxis 的其余行只是为了使代码更加面向对象,真正的牛肉在关键字参数中 . )

    如果未给出 imshow 图像的范围,则认为您希望每个像素都位于位置(0,0),(0,1),...,(Nx-1,Ny-1)的中心位置,然后图像范围将从(-.5,-.5)开始 .

相关问题