10

次の両対数プロットで単純な垂直矢印を描くことができません。

#!/usr/bin/python2

import matplotlib.pyplot as plt
import matplotlib as mpl

plt.yscale('log')
plt.xscale('log')
plt.ylim((1e-20,1e-10))
plt.xlim((1e-12,1))

plt.arrow(0.00006666, 1e-20, 0, 1e-8 - 1e-20, length_includes_head=True)

plt.savefig('test.pdf')

表示されません。ドキュメントからは、幅、高さなどのすべての引数が軸のスケールに関連しているように見えます。これは非常に直感に反します。twin()axisartistパッケージを使用して、制限付きの軸を定義(0,1)し、矢印のパラメーターをより細かく制御しようとし(0,1)ましたが、プライマリ軸の上に完全に独立した軸を設定する方法がわかりませんでした。

何か案は?

4

3 に答える 3

7

この質問に対する答えを探していたところ、役立つ答えが見つかりました! 任意の "mathtext" 文字 (matplotlib の LaTeX バージョン) をマーカーとして指定できます。試してください: plt.plot(x,y, 'ko', marker=r'$\downarrow$', markersize=20)

これにより、位置 (x,y) に下向きの黒い矢印がプロットされます。使用できるその他の記号については、matplotlib.org/users/mathtext.html#mathtext-tutorial を参照してください。

于 2013-06-14T21:12:06.953 に答える
6

サブプロットアプローチ

サブプロットを作成したら、次の操作を行います

  • 位置を揃える
  • set_axis_off()軸をオフにするために使用します (目盛り、ラベルなど)
  • 矢を描け!

したがって、数行で必要なものが得られます。

例えば

#!/usr/bin/python2

import matplotlib.pyplot as plt

hax = plt.subplot(1,2,1)
plt.yscale('log')
plt.xscale('log')
plt.ylim((1e-20,1e-10))
plt.xlim((1e-12,1))

hax2 = plt.subplot(1,2,2)
plt.arrow(0.1, 1, 0, 1, length_includes_head=True)

hax.set_position([0.1, 0.1, 0.8, 0.8])
hax2.set_position([0.1, 0.1, 0.8, 0.8])

hax2.set_axis_off()

plt.savefig('test.pdf')

データの再スケーリング

あるいは、軸ラベルは扱いにくいかもしれませんが、より簡単な方法は、データを再スケーリングすることです。

すなわち

import numpy 

# Other import commands and data input

plt.plot(numpy.log10(x), numpy.log10(y))) 

素晴らしい解決策ではありませんが、目盛りラベルを処理できればまともな結果です!

于 2012-08-02T17:20:06.213 に答える