在此示例中:
import numpy as np
import matplotlib.pyplot as plt
t1 = np.linspace(0, 1, 1000)
t2 = np.linspace(0, 0.5, 1000)
plt.figure(figsize=(10,5))
plt.subplot(121)
plt.plot(t1, np.sin(t1 * np.pi))
plt.subplot(122)
plt.plot(t2, np.sin(t2 * np.pi))
plt.show()
如何压缩第二个图的大小,以使两个子图的x轴具有相同的比例尺?因此看起来像这样:
我正在寻找一种简单而自动的方法,因为我有30多个子图,并且希望它们都具有相同的x轴比例。
答案 0 :(得分:1)
通过指定定义子图比例的gridspec_kw
parameter,可以在两个x轴上近似相同的单位长度。
import numpy as np
from matplotlib import pyplot as plt
t1 = np.linspace(0, 1, 1000)
t2 = np.linspace(0, 0.5, 1000)
fig, (ax1, ax2) = plt.subplots(1, 2, gridspec_kw = {"width_ratios": [np.max(t1)-np.min(t1), np.max(t2)-np.min(t2)]})
ax1.plot(t1, np.sin(t1 * np.pi))
ax2.plot(t2, np.sin(t2 * np.pi))
plt.show()
答案 1 :(得分:0)
您可以使用plt.xlim(xmin, xmax)
设置图的域。使用plt.xlim()
而不给其参数将返回图形的当前xmin
/ xmax
。 plt.ylim()
也是如此。
答案 2 :(得分:0)
一种大概不是很合适的方法,但我认为对{@ 3}}的使用会有用:
plt.subplot2grid((ROWS, COLS), (START_ROW, START_COL), rowspan=ROWSPAN, colspan=COLSPAN)
使用此方法,您可以创建两个子图,这些子图的总和为所需的长度,并相应地将colspan传递到x轴的长度,例如:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 5)
y = np.linspace(0, 10)
plt.figure(figsize=(10,5)) # as specified from your code
# x.max() + y.max() is the total length of your x axis
# this can then be split in the parts of the length x.max() and y.max()
# the parts then should have the correct aspect ratio
ax1 = plt.subplot2grid((1, int(x.max()+y.max()), (0, 0), colspan=int(x.max()))
ax2 = plt.subplot2grid((1, int(x.max()+y.max()), (0, int(x.max())), colspan=int(y.max()))
ax1.plot(x, np.sin(x))
ax2.plot(y, np.sin(y))
plt.show()
对我来说,比例似乎是相同的,如果还应该调整subplot2grid,您仍然需要调整xticklabels
答案 3 :(得分:0)
您可以通过更改纵横比来实现:
import numpy as np
import matplotlib.pyplot as plt
t1 = np.linspace(0, 1, 1000)
t2 = np.linspace(0, 0.5, 1000)
plt.figure(figsize=(10,5))
fig,ax = plt.subplots(nrows = 1,ncols = 2)
ax[0].plot(t1, np.sin(t1 * np.pi))
x1,x2 =ax[1].get_xlim()
x_diff = x2-x1
y1,y2 = ax[1].get_ylim()
y_diff = y2-y1
#plt.subplot(122)
ax[1].plot(t2, np.sin(t2 * np.pi))
ax[1].set_aspect(y_diff/x_diff)