python - 绘制非标准轴

标签 python matplotlib coordinate-systems axes imshow

我正在使用 RA 和 Dec 坐标绘制图像。 图像与 (RA, Dec) = (0,0) 点重叠。对于 y 轴(赤纬)来说这很好,但对于 x 轴(以度为单位),我发现很难正确绘制它。

我希望绘图从 (RA, Dec) = (358, -2) 开始,跨越四个平方度直至 (2, 2)。 有没有办法让 python/matplotlib 理解 x 轴上的 360 度 = 0 度?

这就是我开始的方式:

lowerleft_ra = 358.
lowerleft_dec = -2.
lx = lowerleft_ra
ly = lowerleft_dec
uy = lowerleft_dec + 4.
ux = lowerleft_ra + 4.

plt.imshow(image, origin = 'lower', extent = [lx, ux, ly, uy])

这使得 x 轴跨度从 358 到 362,这不是我想要的。 然后我尝试按如下方式修改它:

if lowerleft_ra + 4. > 360.:
    ux = lowerleft_ra + 4. - 360.
else:
    ux = lowerleft_ra + 4.

但这只是将 x 轴以相反的顺序运行,从 358 降低到 2 度。

如何让它转到 358, 359, 0, 1, 2?

最佳答案

传递给 imshow 的范围信息告知 matplotlib 您正在绘制的对象的大小(比例、比例等)。绘制完成后,您可以手动调整轴。虽然我认为您无法告诉 matplotlib 用非线性值绘制轴,但您可以替换刻度标签。

我建议创建一个从 -2 到 +2 的比例,然后使用以下方法根据您的喜好应用刻度标签:

plt.xticks([-2,-1,0,1,2], [358,359,0,1,2])

或者使用 API

ax.set_xticks([-2,-1,0,1,2])
ax.set_xticklabels([358,359,0,1,2])

这给了我以下情节:

enter image description here

关于python - 绘制非标准轴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34845306/

相关文章:

Python Matplotlib 维恩图

javascript - 缩放的 Canvas 元素的坐标

c - 如何在 C 中返回坐标结构

filter - 长纬度坐标运动的卡尔曼滤波

python - 为什么 `if False`后面的导入会生成局部变量?

python - 循环数据框的列并在 Python 中单独绘制

javascript - 管理 django 中 js 库中的静态链接

Python - 在 z 平面上切片

python - 名称错误 : name 'fish' is not defined

python - 使用 PySCIPopt 的参数化向量