如何转换(或缩放)轴值并重新定义matplotlib中的滴答频率?

时间:2009-07-17 15:05:18

标签: python matplotlib

我正在显示一个jpg图像(我旋转90度,如果这是相关的),当然 轴显示像素坐标。我想转换轴,以便不显示像素数,而是显示我选择的单位 - 无论是弧度,度数,还是我的天文坐标。我知道从像素到(例如)度的转换。以下是我的代码目前的代码片段:

import matplotlib.pyplot as plt 
import Image
import matplotlib
thumb = Image.open(self.image)
thumb = thumb.rotate(90)
dpi = plt.rcParams['figure.dpi']
figsize = thumb.size[0]/dpi, thumb.size[1]/dpi
fig = plt.figure(figsize=figsize)
plt.imshow(thumb, origin='lower',aspect='equal')
plt.show()

...所以继续这个,我可以取matplotlib在轴上打印的每个值,并用字符串更改/替换它来输出吗?我想为特定的坐标格式做这个 - 例如,而不是10.44(度)的角度,我希望它读取10 26'24''(即,度,arcmins,arcsecs)

最后在这个主题上,我想要在情节上控制嘀嗒频率。 Matplotlib可能每隔50个像素打印一次轴值,但我真的想要每个(例如)度数。

听起来我想定义某种类型的数组,其中包含我想要显示的像素值及其转换值(度等),可控制xmin / xmax范围内的采样频率。

Stack Overflow上有matplotlib专家吗?如果是这样,非常感谢您的帮助!为了使这个学习体验更加丰富,我真的很感激在这种matplotlib问题的教程方向上受到了推动。我发现自己对轴,轴,人物,艺术家等感到非常困惑!

干杯,

戴夫

1 个答案:

答案 0 :(得分:33)

看起来你正在处理matplotlib.pyplot界面,这意味着你将能够绕过大部分与艺术家,轴等的交易。您可以使用matplotlib.pyplot.xticks命令控制刻度线的值和标签,如下所示:

tick_locs = [list of locations where you want your tick marks placed]
tick_lbls = [list of corresponding labels for each of the tick marks]
plt.xticks(tick_locs, tick_lbls)

对于您的特定示例,您将必须计算刻度线相对于原始绘图的单位(即像素)的内容(因为您使用imshow) - 您说您知道如何但是,这样做。

我没有多处理图像,但您可以使用不同的绘图方法(例如pcolor),以便提供xy信息。这可能会为您提供更多选项来指定图像的单位。

对于教程,你最好查看matplotlib gallery - 找到你喜欢的东西,并阅读产生它的代码。我们办公室里的一个人最近买了一本关于Python visualization的书 - 可能值得一看。

我通常会想到各种各样的方式如下:

  • Figure是所有Axes
  • 的容器
  • Axes是您绘制的内容(即您的情节)实际显示的空间
  • Axis是实际的xy
  • 艺术家?对我来说,界面太深了:即使我很少在生产图中使用pyplot模块,我也从来不用担心这些。