使用Pylab子图功能:排列具有不同x轴的子图

时间:2016-07-06 16:49:30

标签: matplotlib

我正在使用Pylab(pl)子图函数如下:

f, (ax1, ax2, ax3, ax4) = pl.subplots(4, sharex=True, sharey=False)

假设t0,t1,t2和t3是按时间顺序排列的四个时间戳。轴对象ax1和ax2在时间戳t0和t2之间生成降水和气温数据的子图,总共有100个数据点。轴对象ax3和ax4在时间戳t1和t3之间生成相对湿度和风数据的子图,总共有500个数据点。

使用以下方法将两个时间数组转换为十进制数:

import matplotlib.dates as dates
time_numbers1 = dates.datestr2num(time_array1)
time_numbers2 = dates.datestr2num(time_array2)

我遇到的问题并不令人惊讶:当我运行我的代码时,生成的图形显示ax1和ax2数据失真,与ax3和ax4中的数据不一致。

我知道我的问题与我对这个子图设置的过度简化使用有关:

sharex=True

有没有人有处理此绘图问题的建议/想法?为了清楚起见,这不是一个做或死的情况,因为我总是可以摆弄数据(例如,零填充,插值,平均)以使数据排成一行。然而,这是一个很多数据,所以我很好奇是否有任何聪明的绘图解决方案。

1 个答案:

答案 0 :(得分:0)

我害怕plt.subplots你做了太多你不知道的事情。如果你想要简单的数字,它的效果很好,但如果你想做一些稍微提高的事情,通常最好是创建自己的数字并手动添加子图。即。

import matplotlib.pyplot as plt
fig = plt.figure()
ax1 = fig.add_subplot(4, 1, 1)
ax2 = fig.add_subplot(4, 1, 2, sharex=ax1)
ax3 = fig.add_subplot(4, 1, 3)
ax4 = fig.add_subplot(4, 1, 4, sharex=ax3)

这应该强制只共享两个x轴,但是两对。在这种情况下,我会说,不是堆叠它们,而是使用网格可能更好,如

import matplotlib.pyplot as plt
fig = plt.figure()
ax1 = fig.add_subplot(2, 2, 1)
ax2 = fig.add_subplot(2, 2, 2)
ax3 = fig.add_subplot(2, 2, 3, sharex=ax1)
ax4 = fig.add_subplot(2, 2, 4, sharex=ax3)

希望它有所帮助!