2

プロットに目盛りの位置をマークするとき、目盛りマーカーを配置する方法の標準的な解決策はありますか? Matplotlib の MaxNLocator ( https://github.com/matplotlib/matplotlib/blob/master/lib/matplotlib/ticker.py#L1212 ) を見ましたが、すべての異なるオプションが何をするのか、またはどれが必要なのかがすぐにはわかりません基本的な目盛りの配置。

誰かが単純な目盛り位置関数の疑似コードを提供できますか?

4

1 に答える 1

4

プロットに目盛りを配置するための経験則は、1、2、5、および 10 の倍数を使用することだと思います。私の経験でmatplotlibは、これを順守しているようです。set_ticks()デフォルトの目盛りから逸脱する理由がある場合、それらを設定する最も簡単な方法は、特定の軸に対してメソッドを使用することだと思います。関連ドキュメントはこちら: http://matplotlib.org/api/axis_api.html

import numpy as np
import matplotlib.pyplot as plt
ax = plt.subplot()                        # create axes to plot into
foo = np.array([0, 4, 12, 13, 18, 22])    # awkwardly spaced data
bar = np.random.rand(6)                   # random bar heights
plt.bar(foo, bar)                         # bar chart
ax.xaxis.get_ticklocs()                   # check tick locations -- currently array([  0.,   5.,  10.,  15.,  20.,  25.])

ax.xaxis.set_ticks(foo)                   # set the ticks to be right at each bar
ax.xaxis.get_ticklocs()                   # array([ 0,  4, 12, 13, 18, 22]) 
plt.draw()

ax.xaxis.set_ticks([0, 10, 20])           # minimal set of ticks
ax.xaxis.get_ticklocs()                   # array([ 0, 10, 20])
plt.draw()

この例の 3 つのオプションのうち、この場合はデフォルトの動作を維持します。しかし、デフォルトをオーバーライドする場合は間違いなくあります。たとえば、もう 1 つの経験則は、プロット内のデータではないインク (つまり、マーカーと線) の量を最小限に抑える必要があるということです。デフォルトの目盛りセットが だった場合、[0, 1, 2, 3, 4, 5, 6]それを に変更するかもしれません[0, 2, 4, 6]

編集[0, 10, 20]コメントで示唆されているように、目盛りはロケーターでも実現できます。例:

ax.xaxis.set_major_locator(plt.FixedLocator([0,10,20]))
ax.xaxis.set_major_locator(plt.MultipleLocator(base=10))
ax.xaxis.set_major_locator(plt.MaxNLocator(nbins=3))
于 2013-10-29T13:49:04.180 に答える