Python 为每个子批次设置相等数量的y记号

Python 为每个子批次设置相等数量的y记号,python,matplotlib,plot,Python,Matplotlib,Plot,我试图绘制一个漂亮的子地块图,但我无法解决y记号数不相等的问题。例如,在下图中,“VVIX Beta”图只有3个刻度,而其他图有4到5个刻度。理想情况下,我希望每个图形有五个y记号。已经提出了类似的问题,并建议: ax1.locator_params(axis='y', nbins=5) 其中,ax1到ax7是七个子批次。但是这不起作用,输出似乎忽略了命令。有人知道另一种方法吗?任何帮助都将受到高度赞赏并提前表示感谢 一种可能的选择是使用MaxNLocator,通过: nbins作为滴答数

我试图绘制一个漂亮的子地块图,但我无法解决y记号数不相等的问题。例如,在下图中,“VVIX Beta”图只有3个刻度,而其他图有4到5个刻度。理想情况下,我希望每个图形有五个y记号。已经提出了类似的问题,并建议:

ax1.locator_params(axis='y', nbins=5)
其中,ax1到ax7是七个子批次。但是这不起作用,输出似乎忽略了命令。有人知道另一种方法吗?任何帮助都将受到高度赞赏并提前表示感谢


一种可能的选择是使用MaxNLocator,通过:

  • nbins作为滴答数
  • 最小刻度比nbins的刻度小1
请看以下示例:

import matplotlib.ticker as ticker

def draw(ax, nBins):
    ax.plot(x,  y, 'g', label='line one', linewidth=3)
    ax.plot(x2, y2,'c', label='line two', linewidth=3)
    ax.set_title('Epic Info')
    ax.set_ylabel('Y axis')
    ax.set_xlabel('X axis')
    if nBins > 0:
        ax.yaxis.set_major_locator(ticker.MaxNLocator(nbins=nBins, min_n_ticks=nBins-1))
    else:
        ax.yaxis.set_major_locator(ticker.MaxNLocator(nbins='auto'))
    ax.legend()
    ax.grid(True, color='k')

x =  [ 5, 8,10]; y =  [12.1,15.2, 6.3]
x2 = [ 6, 9,11]; y2 = [ 5.4,15.5, 7.6]
fig, axs = plt.subplots(2, 2, figsize=(10,7), constrained_layout=True)
fig.suptitle('Global title')
draw(axs.flat[0], 4)
draw(axs.flat[1], 5)
draw(axs.flat[2], 6)
draw(axs.flat[3], 0)
plt.show()
如您所见,它生成了4个几乎相同的图:

  • 3具有明确定义的y记号数
  • 最后一个是自动设置
结果是:

注意:对于某些NBIN,实际刻度数与
可以,但至少你可以用我的代码来绘制数据。

为什么不使用
plt.ylim()
?若要为每个绘图设置y限制,我认为这无助于限制y记号的数量,只需为记号本身设置一个限制。此外,考虑到matplotlib很好地选择了限制,我认为没有理由限制轴