2017-04-21 21 views
2

pyplotでサブプロットを作成すると、下の図のようにカーソルの位置が正しく表示されません(カーソルは右上のサブプロットのどこかにあります私がスクリーンショットを作成したとき、カーソルはそこにありませんでした(私はWin10を使用します)。 enter image description here []の間の値は正しい色の値ですが、xyの値は表示されません。これは、サブプロットを使用している場合にのみ発生します。事項この場合 Pyplot:カーソルの位置が表示されていません

def plot_subplots(lam, t): 
    # lam: list of 4 lambda values, t fixed 
    f, ax = plt.subplots(2, 2, sharex='col', sharey='row') 
    ((ax1, ax2), (ax3, ax4)) = ax 
    ax = [ax1, ax2, ax3, ax4] 
    # get X and K (both equidistant arrays) 

    for k, l in enumerate(lam): 
     # get the color array husimi 
     p = ax[k].pcolorfast(X, K, husimi, cmap='jet') 
     ax[k].set_title(r'$\lambda='+str(l)+'$') 

    ax1.set_ylabel(r'$k$') 
    ax3.set_ylabel(r'$k$') 
    ax1.set_yticks([min(K), 0, max(K)]) 
    ax1.set_yticklabels([r'$-\pi$', r'$0$', r'$\pi$']) 
    ax3.set_yticks([min(K), 0, max(K)]) 
    ax3.set_yticklabels([r'$-\pi$', r'$0$', r'$\pi$']) 
    ax3.set_xlabel(r'$x$') 
    ax4.set_xlabel(r'$x$') 
    ax3.set_xticks([min(X), 0, max(X)]) 
    ax4.set_xticks([min(X), 0, max(X)]) 
    ax3.set_xticklabels([r'$'+str(min(X))+'$', r'$0$', r'$'+str(max(X))+'$']) 
    ax4.set_xticklabels([r'$'+str(min(X))+'$', r'$0$', r'$'+str(max(X))+'$']) 
    f.suptitle(r'$t_2='+str(t)+'$') 

は、私は、Pythonの3.4.3 64 - とmatplotlibの1.5.2を使用します。
は、ここでその画像を生成するコードです。誰かがこの動作を生成するコードにエラーを見つけますか、これは plt.pcolorfastというちょっとのバグですか?

答えて

3

これはサブプロットとは関係ありません。 pcolorfastのバグでもエラーでもありません。

xticklabelsを手動で設定する理由はありません。 ax.set_xticklabelsを使用すると、軸のフォーマッタが上書きされ、固定フォーマッタが作成されます。 ax.set_xticklabels(["apple", "banana", "cherry"])を設定している場合、問題が明らかになることがあります。あなたはリンゴとバナナの間にどんな価値がありますか?

したがって、考え方はもちろんset_xticklabelsを使用せず、固定フォーマッタを使用しないことです。代わりに、FuncFormatterを使用して、可能なすべての入力に対して値を返す関数を使用することができます。 np.piのフォーマットはπです。

import matplotlib.pyplot as plt 
import matplotlib.ticker 
import numpy as np; np.random.seed(1) 

x = np.linspace(-np.pi,np.pi) 
X,Y = np.meshgrid(x,x) 
Z = np.random.normal(size=np.array(X.shape)-1) 


fig, ax = plt.subplots() 

pc = ax.pcolorfast(X,Y,Z) 
ax.set_yticks([-np.pi, 0, np.pi]) 

def fmt(x,pos): 
    if np.isclose([np.abs(x)],[np.pi]): 
     if x>0: return r'$\pi$' 
     else: return r'$-\pi$' 
    else: 
     return "%g" % x 
ax.yaxis.set_major_formatter(matplotlib.ticker.FuncFormatter(fmt)) 

fig.colorbar(pc, ax=fig.axes) 
plt.show() 

enter image description here

+0

ありがとうございます!その簡単な方法でラベルを設定するときに何かを破壊するようなものであることを知っておいてよかったです。 – Michael

関連する問題