Python Pyplot:未显示光标的位置

Python Pyplot:未显示光标的位置,python,matplotlib,Python,Matplotlib,当我在pyplot中创建子图时,光标的位置没有正确显示,如下图所示(光标位于右上方子图的某个位置(与所有其他子图的行为相同),但当我制作屏幕截图时,光标不在那里(我使用Win10)): []之间的值是正确的颜色值,但未显示x和y值。只有在使用子批时才会发生这种情况。 下面是生成该图片的代码: def plot_subplots(lam, t): # lam: list of 4 lambda values, t fixed f, ax = plt.subplots(2, 2, s

当我在pyplot中创建子图时,光标的位置没有正确显示,如下图所示(光标位于右上方子图的某个位置(与所有其他子图的行为相同),但当我制作屏幕截图时,光标不在那里(我使用Win10)):
[]
之间的值是正确的颜色值,但未显示
x
y
值。只有在使用子批时才会发生这种情况。
下面是生成该图片的代码:

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
的一些错误?

这与子批无关。这也不是
pcolorfast
中的错误

没有显示数字的原因是您手动设置了Xticklabel。使用
ax.setxticklabels
覆盖轴的格式化程序并创建固定的格式化程序。如果您正在设置ax,问题可能会变得很明显。请设置“[“苹果”、“香蕉”、“樱桃”);苹果和香蕉之间你会有什么价值

因此,我们的想法当然是不使用
setxticklabels
,因此不使用固定的格式化程序。相反,我们可以使用
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()

谢谢!很高兴知道我在用这种简单的方式设置标签时破坏了一些东西。