8

imshow次のコードを使用して、プロットの x 軸の目盛りの値を変更しようとしています。

import matplotlib.pyplot as plt
import numpy as np

def scale_xaxis(number):
    return(number+1001)

data = np.array([range(10),range(10,20)])
fig = plt.figure(figsize=(3,5))
ax = fig.add_subplot(111)
ax.imshow(data,aspect='auto')
ax.autoscale(False)
xticks = ax.get_xticks()
ax.xaxis.set_ticklabels(scale_xaxis(xticks))
plt.savefig("test.png")

結果の画像 http://ubuntuone.com/2Y5ujtlEkEnrlTcVUxvWLU

ただし、x ティックはオーバーラップし、「丸められていない」値を持ちます。matplotlib がこれを自動的に行う方法はありますか? 使用するset_ticklabelsか、他の方法で?

4

2 に答える 2

8

また、extent (doc)を使用matplotlibして、目盛りラベルを配置し、任意のシフトを追加する方法についてすべての考えを実行できるようにすることも検討してください。

data = np.array([range(10),range(10,20)])
fig = plt.figure(figsize=(3,5))
ax = fig.add_subplot(111)
ax.imshow(data,aspect='auto',extent=[10000,10010,0,1])  

あなたが間違いなく私の手にやりたいのなら、あなたが 望むものを得るためにformatterlocatorを設定する方が良いかもしれません(doc)axis

import matplotlib.pyplot as plt
import numpy as np

def scale_xaxis(number):
    return(number+1001)

def my_form(x,pos):
    return '%d'%scale_xaxis(x)

data = np.array([range(10),range(10,20)])
fig = plt.figure(figsize=(3,5))
ax = fig.add_subplot(111)
ax.imshow(data,aspect='auto')
ax.autoscale(False)
ax.xaxis.set_major_locator(matplotlib.ticker.MultipleLocator(int(2)))
ax.xaxis.set_major_formatter(matplotlib.ticker.FuncFormatter(my_form))

ロケーターを設定して、目盛りが整数以外の場所に配置されないようにする必要があります。これは、フォーマッターによって強制的に整数にキャストされます (間違った場所にそれらを残してしまいます)。

関連する質問:

matplotlib: 軸のオフセット値を整数または特定の数値にフォーマットする

matplotlibの目盛りラベルのフォーマットから先頭の0を削除する

于 2012-11-16T17:35:15.637 に答える
3

これを行うにはいくつかの方法があります。

あなたはできる:

  1. float の配列の代わりに int の配列を渡す
  2. フォーマットされた文字列の配列を渡す
  3. カスタム ティック フォーマッタを使用する

最後のオプションは、この単純なものにはやり過ぎです。

scale_xaxis最初のオプションの例として、関数を次のように変更します。

def scale_xaxis(numbers):
    return numbers.astype(int) + 1001

ax.get_xticks得られるのは、単一の値ではなく、numpy 配列であることに注意してください。number.astype(int)したがって、代わりにを行う必要がありint(number)ます。

または、一連のフォーマットされた文字列を返すこともできます。set_xticklabels実際には文字列のシーケンスが必要です:

def scale_xaxis(numbers):
    return ['{:0.0f}'.format(item + 1001) for item in numbers]

ここでカスタム ティック フォーマッタを使用するのはやり過ぎなので、ここでは省略します。ただし、適切な状況では非常に便利です。

于 2012-11-16T17:31:43.663 に答える