make子图具有相同的x范围

时间:2016-03-13 18:34:08

标签: python matplotlib

我正在尝试将数百个子图绘制成一个图形(我可以将其分割成网格并使其跨越多个PDF页面)但如果我使用标准的matplotlib子图并且一次添加一个子图,则该过程很慢。可能适用于我的问题here的解决方案。问题是我的数据对于每个子图有不同的x范围。如何使所有x值具有相同的宽度,比如1英寸?这是一个说明问题的例子。

import numpy as np
import matplotlib.pyplot as plt

ax = plt.subplot(111)
plt.setp(ax, 'frame_on', False)
ax.set_ylim([0, 5])
ax.set_xlim([0, 30])
ax.set_xticks([])
ax.set_yticks([])
ax.grid('off')

x1 = np.arange(2,8)
y1 = np.sin(x1)*np.sin(x1)

xoffset1 = max(x1) + 1

print x1

x2 = np.arange(5,10)
y2 = np.sin(x2)*np.sin(x2)
print x2
print x2+ xoffset1

xoffset2 = max(x2) + xoffset1



x3 = np.arange(3,15)
y3 = np.sin(x3)*np.sin(x3)
print x3
print x3+ xoffset2


ax.plot(x1,y1)
ax.plot(x2+xoffset1, y2)
ax.plot(x3+xoffset2, y3)

plt.show()

plot

谢谢

1 个答案:

答案 0 :(得分:1)

我不确定这是否是您想要的,但这里是一个示例,我重新映射所有x范围以使所有范围占用相同的空间:

import numpy as np
import matplotlib.pyplot as plt

nplots = 3
xmin = 0
xmax = 30
subrange = float(xmax-xmin)/float(nplots)

ax = plt.subplot(111)
plt.setp(ax, 'frame_on', False)
ax.set_ylim([0, 5])
ax.set_xlim([xmin, xmax])
ax.set_xticks([])
ax.set_yticks([])
ax.grid('off')

xranges = [(2,8), (5,10), (3,15)]

for j in xrange(nplots):
    x = np.arange(*xranges[j])
    y = np.sin(x)*np.sin(x)

    new_x = (x-x[0])*subrange/float(x[-1]-x[0])+j*subrange ## remapping the x-range

    ax.plot(new_x,y)

plt.show()