22

我正在显示一个 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'' (即度、弧分、弧秒)

最后在这个主题上,我想在情节上控制滴答频率。Matplotlib 可能每 50 个像素打印一次轴值,但我真的希望它每(例如)度。

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

Stack Overflow 上有没有 matplotlib 专家?如果是这样,非常感谢您的帮助!为了使这成为一种更多的学习体验,我非常感谢在此类 matplotlib 问题的教程等方向上受到启发。我发现自己对轴、轴、人物、艺术家等感到非常困惑!

干杯,

戴夫

4

1 回答 1

37

看起来您正在处理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)来提供x信息y。这可能会为您提供更多选项来指定图像的单位。

对于教程,您最好浏览matplotlib 库- 找到您喜欢的内容,然后阅读生成它的代码。我们办公室的一个人最近买了一本关于Python 可视化的书——这可能值得一看。

我通常认为所有不同部分的方式如下:

  • AFigure是所有的容器Axes
  • AnAxes是您绘制的内容(即您的情节)实际显示的空间
  • AnAxis是实际xy坐标轴
  • 艺术家?这对我来说界面太深了:我从来不用担心这些,尽管我很少pyplot在生产地块中使用该模块。
于 2009-07-17T15:49:08.467 回答