强制matplotlib来修复绘图区域

时间:2017-04-26 17:47:21

标签: python matplotlib

我有多个具有相同x轴的图。我想将它们堆叠在报告中,并将所有内容排成一行。但是,matplotlib似乎根据y刻度标签长度略微调整它们。

相对于我保存的pdf画布,是否可以强制绘图区域和位置在绘图中保持相同?

In [147]: x
Out[147]: 
array([[1, 2, 3],
       [4, 5, 6]])

In [148]: idx = np.unravel_index(3, np.array(x.shape)[::-1])

In [149]: idx
Out[149]: (1, 1) # row, col indices obtained in C order

In [150]: x[idx]
Out[150]: 5

3 个答案:

答案 0 :(得分:2)

您的问题有点不清楚,但是将它们绘制为同一图中的子图应该保证两个子图的轴和图形大小将彼此对齐

import numpy as np
import matplotlib.pyplot as plt

xs=np.arange(0.,2.,0.00001)
ys1=np.sin(xs*10.) #makes the long yticklabels
ys2=10.*np.sin(xs*10.)+10. #makes the short yticklabels

fig, (ax1, ax2) = plt.subplots(2, 1)
ax1.plot(xs,ys1,linewidth=2.0)
ax1.set_xlabel('x')
ax1.set_ylabel('y')

ax2.plot(xs,ys2,linewidth=2.0)
ax2.set_xlabel('x')
ax2.set_ylabel('y')

plt.subplots_adjust(hspace=0.3)  # adjust spacing between plots    
plt.show()

这产生了下图:

enter image description here

答案 1 :(得分:1)

我有同样的问题。以下对我有用。

在所有python脚本周围,对所有绘图强制使用相同的图形宽度,例如:

fig1 = plt.figure(figsize=(12,6))
...
fig2 = plt.figure(figsize=(12,4))

不要使用(非常重要!):

fig.tight_layout()

保存图形

plt.savefig('figure.png')

现在绘图区域应该相同。

答案 2 :(得分:0)

使用具有相同x轴的子图应该可以解决问题。

在创建子图时使用sharex=Truesharex的好处是1个子图上的缩放或平移也会在所有具有共享轴的子图上自动更新。

import numpy as np
import matplotlib.pyplot as plt
xs = np.arange(0., 2., 0.00001)
ys1 = np.sin(xs * 10.)  # makes the long yticklabels
ys2 = 10. * np.sin(xs * 10.) + 10.  # makes the short yticklabels

fig, (ax1, ax2) = plt.subplots(2, sharex=True)
ax1.plot(xs, ys1, linewidth=2.0)
ax1.xlabel('x')
ax1.ylabel('y')

ax2.plot(xs, ys2, linewidth=2.0)
ax2.xlabel('x')
ax2.ylabel('y')
plt.show()