我在python 3(我认为)中使用matplotlib在for
循环中创建了几个子图,我想设置yticks/ xticks
的NUMBER,因为max和min值随每个变化而变化环。
我已按照此回答中的建议尝试使用MaxNLocator change ticks number on a subplot
(我很抱歉现在就另外一个问题提出这个问题,但我无法对那里的答案发表评论):
from matplotlib import ticker
M = 3
yticks = ticker.MaxNLocator(M)
ax.yaxis.set_major_locator(yticks)
但这对我不起作用。 yticklabels
和yticks
完全消失了for
循环中的子图,我得到两个xticks
,尽管我要求五个。 for
循环外的一个子图仍然有yticklabels
,但是不同于请求的刻度数。
而且我也没有使用对数轴!
如果有人有想法,我会很棒,如何解决这个问题! :)
我的代码结构是:
f = plt.figure(figsize =(13,10),dpi=300)
yticks = ticker.MaxNLocator(4) # number of yticks
xticks = ticker.MaxNLocator(5) # number of xticks
yfmt = md.DateFormatter('%d.%m.\n%H:%M') # format of date
for n,m in enumerate (['20-25cm','15-20cm','10-15cm','5-10cm','0-5cm']):
ax = f.add_subplot(6,1,-n+6) # subplots number 6 to number 2
ax.yaxis.set_major_locator(yticks) # <-- ?
ax.xaxis.set_major_locator(xticks) # <-- ?
ax.xaxis.set_major_formatter(yfmt) # format for date on xaxis
ax.xaxis.set_tick_params(labelsize=20)
ax.yaxis.set_tick_params(labelsize=20)
if n !=0:
ax.set_xticklabels([]) # only put xtlabels at the bottom subplot
Y = dictionary[data][n][:]
#Y is a np.array with floats from a dictionary
X = dictionary[date][n][:]
#X is a np.array containing datetime objects from the same dictionary
plt.plot(X[-250:-1],Y[-250:-1], label = m)
ax1 = f.add_subplot(6,1,1) # subplot number 1 outside the loop
ax1.xaxis.set_major_formatter(yfmt)
ax1.xaxis.set_tick_params(labelsize=20)
ax1.yaxis.set_tick_params(labelsize=20)
ax1.yaxis.set_major_locator(yticks) # <-- ?
ax1.xaxis.set_major_locator(xticks) # <-- ?
ax1.set_xticklabels([])
plt.scatter(X[-250:-1],poolA[-250:-1]) # poolA,B,C are just np.arrays
plt.hold(True)
plt.scatter(X[-250:-1],poolB[-250:-1])
plt.hold(True)
plt.scatter(X[-250:-1],poolC[-250:-1])
plt.savefig('figure.pdf',format = 'pdf', dpi=f.dpi)