matplotlib 使用相同x轴和子图时重叠图[重复]

bxfogqkk  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(118)

此问题在此处已有答案

Improve subplot size/spacing with many subplots(9个答案)
11天前关闭。
我无法使用对数标度插值数据,我想出的唯一解决方案是在同一个图中绘制插值函数和图形,但使用不同的xscale。它工作正常,但当在右侧添加另一个图(子图)时,ylabel与“主”图重叠。我可以做些什么吗?这是代码:

# Grafico di BOde e frequenza di taglio
popt, pcov = curve_fit(Lin, LOGf_der[0: 4], A_der[0: 4])

x = np.linspace(2, 4, 100)
RESIDUI = Residui(LOGf_der[0:4], A_der[0:4], popt[0], popt[1])
xRES = np.linspace(LOGf_der[0], LOGf_der[4], len(RESIDUI))

fig, axs = plt.subplots(1, 2, figsize=(20, 10))

ax = axs[0]

ax.scatter(f_der, A_der)
ax.tick_params(axis="both", which="major", labelsize=15)
ax.set_xscale('log')
ax.legend(loc="upper left", fontsize=16)
ax.grid(True, which='both')
ax.set_xlabel("Frequenza Hz", fontsize = 16)
ax.set_ylabel("Guadagno A", fontsize = 16)
ax.set_title("Grafico di Bode", fontsize = 18)

ax = ax.twiny()

ax.plot(LOGf_der, A_der, '--o', label="Dati sperimentali")
ax.plot(LOGf_VTC, A_VTC, label="VTC", c = 'purple')
ax.plot(x, Lin(x, popt[0], popt[1]), color="red", lw=1.4, label="Interpolazione lineare")
ax.tick_params(axis="both", which="major", labelsize=15)
ax.axis('off')
ax.legend(fontsize = 16)

fig.tight_layout()

ax = axs[1]

ax.scatter(xRES, RESIDUI, s = 80, label= ("Residui"))
ax.hlines(0, 1.9, 4.3, color="orange", linestyle="dashed", lw = 3, label=(r"$f(x) = 0$"))
ax.grid(True)
ax.set_xlabel(r"$\log_{10} f, Hz$", fontsize=16)
ax.set_ylabel("Residui", fontsize=16)
ax.set_title("Grafico dei residui", fontsize=18)
ax.tick_params(axis="both", which="major", labelsize=15)
ax.legend(fontsize = 16)

字符串
x1c 0d1x的数据
这就是我得到的。我怎么能解决这个问题?谢谢!

g6baxovj

g6baxovj1#

希望你做得很好!感谢您提供的情节代码-重叠的标签肯定会令人沮丧的工作。
看起来你的第二个子图上的ylabel被绕成了两条线,占用了更多的垂直空间。不过没问题,我们可以通过一些调整来解决这个问题。
关键是使用subplots_adjust在子图之间添加一些填充。在创建图形后尝试添加这行:

fig, axs = plt.subplots(2) 

fig.subplots_adjust(hspace=0.5)

字符串
这应该会创造一些喘息的空间,防止ylabels重叠。你可以随时上下调整hspace的值,直到找到正确的平衡。

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit

# Define your functions Lin and Residui here

# Your data and curve fitting code

fig, axs = plt.subplots(1, 2, figsize=(20, 10)

# Adjust the horizontal space between the subplots
plt.subplots_adjust(wspace=0.3)

ax = axs[0]

# Your plotting code for the first subplot

ax = axs[1]

# Your plotting code for the second subplot

plt.show()


让我知道,如果这样做的伎俩,或者如果你有任何其他问题!绘图很好地需要一些技巧。但采取一些小步骤,如添加一些填充可以走很长的路。希望这有助于解决您的标签问题-随时联系,如果有任何其他的东西出现。

相关问题