Pyplot:光标位置未显示

时间:2017-04-21 08:34:49

标签: python matplotlib

当我在pyplot中制作子图时,光标的位置没有正确显示,如下图所示(光标位于右上方的子图中(所有其他子图中都有相同的行为),但是当我做截图时,光标不存在(我使用Win10)): enter image description here []之间的值是正确的颜色值,但未显示xy值。只有在我使用子图时才会发生这种情况 以下是产生该图片的代码:

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 64Bit和Matplotlib 1.5.2。是否有人在产生此行为的代码中发现错误,或者这只是plt.pcolorfast的一些错误?

1 个答案:

答案 0 :(得分:4)

这与子图无关。它也不是pcolorfast中的错误或错误。

原因是,没有显示数字是您手动设置xticklabels。使用ax.set_xticklabels覆盖轴的Formatter并创建一个固定的格式化程序。如果您设置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