如何使用yaxis和xaxis,我想要的并且与绘图中的数据无关? 例如,我想使用以下代码将世界地图绘制为图像:
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处理数据,如图所示。
答案 0 :(得分: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
答案 1 :(得分: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')
如果您的地图是颠倒的,请将关键字参数origin='lower'
添加到imshow
。需要aspect='auto'
才能使地图在两个维度中独立展开。 (add_subaxis
的其余行只是为了使代码更加面向对象,真正的优势在于关键字参数。)
如果imshow
未给出图像的范围,则认为您希望每个像素都位于(0,0),(0,1),...的位置, (Nx-1,Ny-1),然后图像范围将从(-.5,-.5)开始。