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