使用MaxNLocator更改子图上的刻度数 - 刻度消失

时间:2017-11-02 23:20:38

标签: python matplotlib axis-labels subplot

我在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)

但这对我不起作用。 yticklabelsyticks完全消失了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)

0 个答案:

没有答案