web-dev-qa-db-ja.com

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' '(つまり、度、分、秒)を読み取ります。

最後に、このテーマでは、プロット上のティック頻度を制御したいと思います。 Matplotlibは、軸の値を50ピクセルごとに出力する場合がありますが、(たとえば)度ごとに出力する必要があります。

Xmin/xmaxの範囲でサンプリング周波数を制御しながら、表示したいピクセル値とその変換値(度など)を使用して、ある種の配列を定義したいようです。

Stack Overflowに関するmatplotlibの専門家はいますか?もしそうなら、あなたの助けを事前に感謝します!これをより学習的な経験にするために、この種のmatplotlibの問題についてチュートリアルなどの方向に進んでいただければ幸いです。斧、軸、フィギュア、アーティストなどと非常に混乱していることに気づきました!

乾杯、

デイブ

20
Dave

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を使用しているため)-これを行う方法を知っていると言いました、しかし。

私は画像をあまり扱っていませんが、pcolorxの情報を提供できる別のプロット方法(例:y)を使用できる場合があります。これにより、画像の単位を指定するためのオプションがさらにいくつか提供される場合があります。

チュートリアルの場合は、 matplotlib gallery -が好きなものを見つけて、それを生成したコードを読むとよいでしょう。私たちのオフィスの人の1人が最近 Pythonの視覚化 -に関する本を購入しました。これは一見の価値があるかもしれません。

私が一般的にすべてのさまざまな部分について考える方法は次のとおりです。

  • Figureは、すべてのAxesのコンテナです。
  • Axesは、描画したもの(つまりプロット)が実際に表示されるスペースです。
  • Axisは実際のx軸とy軸です
  • アーティスト?それは私にとってインターフェースでは深すぎます。実稼働プロットでpyplotモジュールを使用することはめったにありませんが、まだそれらについて心配する必要はありませんでした。
33
Tim Whitcomb