matplotlib -如何使用MaxNumbers并指定一个必须在轴上的数字?

uz75evzq  于 2023-10-24  发布在  其他
关注(0)|答案(1)|浏览(83)

我确实对Python中的matplotlib有一个问题。我创建了不同的图形,其中每个图形都应该具有相同的高度,以便将它们打印在出版物/海报中。
如果y轴在最顶端有一个标签,这会缩小带有图的框的高度。所以我使用MaxNicket来删除上下的y刻度。在一些图中,我希望在y轴上有一个数字1.0,因为我有标准化的数据。所以我需要一个解决方案,在这些情况下扩展y轴并确保1.0是一个y刻度,但是使用tight_layout()不会破坏图形的大小。
下面是一个简单的例子:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import MaxNLocator

x = np.linspace(0,1,num=11)
y = np.linspace(1,.42,num=11)

fig,axs = plt.subplots(1,1)
axs.plot(x,y)

locator=MaxNLocator(prune='both',nbins=5)
axs.yaxis.set_major_locator(locator)

plt.tight_layout()

fig.show()

这里有一个link到一个例子-pdf,它显示了上框线高度的问题。
我尝试使用adjust_subplots(),但这对我来说没有用,因为我改变了数字的大小,并希望始终保持相同的字体大小,这会改变边距。
问题是
我如何使用MaxNm并指定一个必须在y轴上的数字?
希望你们中有人能给点建议。
你好,莱南

cyvaqqii

cyvaqqii1#

假设你事先知道一个页面上的一行中有多少个图,解决这个问题的一种方法是把所有这些图放在一个图中-matplotlib将确保它们在轴上对齐:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import MaxNLocator

x = np.linspace(0, 1, num=11)
y = np.linspace(1, .42, num=11)

fig, (ax1, ax2) = plt.subplots(1,2, figsize=(8,3), gridspec_kw={'wspace':.2})
ax1.plot(x,y)
ax2.plot(x,y)

locator=MaxNLocator(prune='both', nbins=5)
ax1.yaxis.set_major_locator(locator)

# You don't need to use tight_layout and using it might give an error
# plt.tight_layout()  

fig.show()

相关问题