我从这个问题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()
答案 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)
再次将数字加到眼前。我确信在某个时间点有人可以添加如何计算这些数字,而无需通过眼球调整。