我有像this这样的表问题,显然使用为该答案提供的解决方案我可以调整单元格。我不明白的是,如果不进行眼球测试,如何检测一个太大而另一个太小
更新 代码创建下面的图表。请注意表格下的文本大小和列表中文本的大小。下面太大了,列表太小了。如何以编程方式检测这些条件而无需在视觉上查看图表。
import sys
import numpy as np
import pandas as pd
import random
import string
import matplotlib.pyplot as plt
import matplotlib.gridspec as grid_spec
def id_generator(size=6, chars=string.ascii_uppercase + string.digits):
return ''.join(random.choice(chars) for _ in range(size))
month_labels = "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
month_list = np.r_[1:13]
month_bar_width = .35
plt.ion()
with plt.style.context('fivethirtyeight'):
fig = plt.figure(figsize=(8.5, 11))
gs = grid_spec.GridSpec(3, 3)
ax1 = plt.subplot(gs[0:2, 0:])
ax2 = plt.subplot(gs[2:3, 0])
names = [id_generator(10) for _ in range(20)]
counts = [random.randint(0,50) for _ in range(12)]
current_bbox = ax1.get_position()
bottom_of_1 = current_bbox.y0
current_bbox.y0 += (1 - current_bbox.y0) * .25
ax1.set_position(current_bbox)
cell_text = []
row_labels = []
row_colors = []
bar_start = np.arange(len(month_list))
bar_width = (bar_start[1] - bar_start[0]) * 0.7
row_bottom = np.zeros(len(month_list))
ax1.bar(bar_start, counts, width=bar_width)
cell_text.append(counts)
tbl = ax1.table(cellText=cell_text,loc='bottom')
ax1.set_xticks([])
rows = list(zip(names, counts))
tbl = ax2.table(cellText=rows, loc='center')
ax2.set_xticks([])
ax2.set_yticks([])
更新2 我可以在上一个答案中添加以下代码:
table_props = tbl.properties()
table_cells = table_props['child_artists']
for cell in table_cells: cell.set_height(0.1)
但是通过观察图表并查看当前高度值来挑选0.1。我正在寻找的是如何在不看图的情况下计算0.1。如果当前高度为.5且高度太小,我需要将其放大,但如果我想让它变小,则必须为.4。了解你所处的情况的公式是什么。或者反过来知道高度是好的,但你需要改变字体大小。
答案 0 :(得分:0)
在更新2中,您只更改第二个表。
无论如何,我想你正在寻找tight_layout()
函数,只需尝试在最后添加:
plt.tight_layout(h_pad=2)
h_pad
设置两个子图之间的高度空间,所以这里2是因为你有一个上面有一行的表。 (虽然经验确定);
AFAIK是matplotlib中唯一能够自动更改绘图属性以调整元素间距的函数plt.tight_layout()
和plt.savefig(..., bbox_inches="tight")
。
有关详细信息,请参阅此处:http://matplotlib.org/users/tight_layout_guide.html
HTH
答案 1 :(得分:0)
我的解决方案是为表条目创建一个单独的gridspec区域。将表放入轴,然后执行tight_layout。这有效。表定位可能很棘手,但我确实让它起作用。