为了账号安全,请及时绑定邮箱和手机立即绑定

如何更改图中轴的单位?

如何更改图中轴的单位?

凤凰求蛊 2022-10-06 19:16:44
我正在用matplotlib, 从一些.fits文件中制作一些星系速度的数字。问题是图中的轴以像素为单位显示了银河系的大小,我想将它们显示为偏角和 RightAcension(以角度单位)。我已经知道每个像素的大小为 0.396 弧秒。如何在 X 和 Y 轴上将像素转换为弧秒?代码如下:############################################################################### Generally the image information is located in the Primary HDU, also known# as extension 0. Here, we use `astropy.io.fits.getdata()` to read the image# data from this first extension using the keyword argument ``ext=0``:image_data = fits.getdata(image_file, ext=0)############################################################################### The data is now stored as a 2D numpy array. Print the dimensions using the# shape attribute:print(image_data.shape)############################################################################### Display the image data:fig = plt.figure()plt.imshow(image_data, cmap='Spectral_r', origin='lower', vmin=-maior_pixel, vmax=maior_pixel)plt.colorbar()fig.suptitle(f'{gals_header["MANGAID"]}', fontsize=20, fontweight='bold')ax = fig.add_subplot(111)fig.subplots_adjust(top=0.85)ax.set_title('RC')ax.set_xlabel('pixelsx')ax.set_ylabel('pixelsy')还有更多的代码,但我只想展示我认为相关的部分(如有必要,我可以在评论中添加更多代码)。此代码基于此链接中的示例代码:https ://docs.astropy.org/en/stable/generated/examples/io/plot_fits-image.html#sphx-glr-download-generated-examples-io-情节适合图像-py我已经尝试了一些东西,比如Axes.convert_xunits一些pyplot.axes功能,但没有任何效果(或者我只是不知道如何正确使用它们)。这就是图像当前的样子有人可以帮忙吗?先感谢您。
查看完整描述

1 回答

?
慕的地6264312

TA贡献1817条经验 获得超6个赞

您可以使用任何您想要的plt.FuncFormatter对象作为刻度标签。


这是一个示例(确实是一个非常愚蠢的示例),请参阅优秀的 Matplotlib 文档了解详细信息。


import matplotlib.pyplot as plt

from numpy import arange


img = arange(21*21).reshape(21,21)


ax = plt.axes()

plt.imshow(img, origin='lower')

ax.xaxis.set_major_formatter(

    plt.FuncFormatter(lambda x, pos: "$\\frac{%d}{20}$"%(200+x**2)))

//img1.sycdn.imooc.com//633eb9570001adfa04660416.jpg

每个轴都有一个major_formatter负责生成刻度标签的轴。

格式化程序必须是从 子类化的类的实例Formatter,上面我们使用了FuncFormatter.

要初始化 aFuncFormatter我们向它传递一个格式化函数,我们必须使用以下必需的特征来定义它

  • 有两个输入,x并且posx要格式化的横坐标(或纵坐标),而pos可以安全地忽略,

  • 返回要用作标签的字符串。

在示例中,函数已使用lambda语法在现场定义,其要点是格式化字符串 ( "$\\frac{%d}{20}$"%(200+x**2)),将横坐标函数格式化为LaTeX分数,如上图所示。

重新pos参数,据我所知,它仅用于某些方法,例如

In [69]: ff = plt.FuncFormatter(lambda x, pos: "%r ፨ %05.2f"%(pos,x))


In [70]: ff.format_ticks((0,4,8,12))

Out[70]: ['0 ፨ 00.00', '1 ፨ 04.00', '2 ፨ 08.00', '3 ፨ 12.00']

但通常你可以忽略pos函数体中的参数。


查看完整回答
反对 回复 2022-10-06
  • 1 回答
  • 0 关注
  • 99 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信