Matplotlib表和图表覆盖下一个图表

时间:2016-02-25 19:14:58

标签: python matplotlib charts axis-labels

我从这个问题chart and table开始,解决方案确实把表放在图表下面。

然而,问题的第二部分是在同一(打印)页面上使用多个图表。从上一个问题中回答并添加另一个子图表显示该表将覆盖以下图表。

tight_layout没有帮助(实际上使情况更糟)。

我确实尝试了保留一行(所以总行数是3首先从0开始,然后是从2开始)但是这会留下一个很大的空白空间,因为表格甚至没有接近填满整行。

GridSpec似乎没有帮助,或者至少我不知道如何解决这个问题。

months = [1,2,3,4,5,6,7,8,9,10,11,12]

by_year = [
(2012,  (8,6,8,9,1,2,8,9,4,3,2,6)),
(2013,  (5,6,2,9,6,2,8,9,4,3,2,6)),
(2014,  (7,6,3,9,4,2,8,9,4,3,2,6)),
]

colors = ['r','g','b','y']
import pylab as plt
fig = plt.figure()
ax = plt.subplot2grid((2,1), (0,0))
ax2 = plt.subplot2grid((2,1), (1,0))

#0.9  to leave a small space between groups of bars
import numpy as NP
N = 0.95 / (len(by_year))

cell_text = []
for i, (year, row) in enumerate(by_year):
    print i, year, row
    idx = NP.arange(0, len(months)) + N * i
    # * 0.8 to put a small gap between bars
    ax.bar(idx, row, color=colors[i], width=N * 0.8, label=year)
    cell_text.append(row)

tbl = ax.table(cellText=cell_text, rowLabels=[x[0] for x in by_year], loc='bottom', colLabels=months)
prop = tbl.properties()
ax.set_xticks([])
lgd = ax.legend(loc='upper left', bbox_to_anchor=(1, 1.0))
fig.show()

1 个答案:

答案 0 :(得分:0)

嗯,我解决了这个问题。解决方案有两个部分,包括使用get和set position。

第一部分是在创建子图

后添加以下内容
current_bbox = ax.get_position()
current_bbox.y0 = .45
ax.set_position(current_bbox)

该代码将非常好地向下移动。原来的y0是在.3629,我不得不玩数字才能做到正确。我不能以编程方式做到这一点(或者至少我不了解这种关系)。但通过眼球和反复试验,这个价值很有效。

该修复程序导致表现在抬起,以便表中的每一行都靠得太近。表创建时的以下代码修复了(添加了bbox)

tbl = ax.table(cellText=cell_text, 
   rowLabels=[x[0] for x in by_year], loc='bottom', 
   bbox[0, -0.2, 1, 0.175],
   colLabels=months)

再次将数字加到眼前。我确信在某个时间点有人可以添加如何计算这些数字,而无需通过眼球调整。

结果现在看起来像enter image description here