Python 为每个子批次设置相等数量的y记号
我试图绘制一个漂亮的子地块图,但我无法解决y记号数不相等的问题。例如,在下图中,“VVIX Beta”图只有3个刻度,而其他图有4到5个刻度。理想情况下,我希望每个图形有五个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作为滴答数
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记号数
- 最后一个是自动设置
可以,但至少你可以用我的代码来绘制数据。为什么不使用
plt.ylim()
?若要为每个绘图设置y限制,我认为这无助于限制y记号的数量,只需为记号本身设置一个限制。此外,考虑到matplotlib很好地选择了限制,我认为没有理由限制轴