有没有办法在matplotlib表中指定各列的宽度?
我表中的第一列只包含2-3位数字ID,我希望此列比其他列小,但我似乎无法让它工作.
假设我有一个这样的表格:
import matplotlib.pyplot as plt
fig = plt.figure()
table_ax = fig.add_subplot(1,1,1)
table_content = [["1", "Daisy", "ill"],
["2", "Topsy", "healthy"]]
table_header = ('ID', 'Name','Status')
the_table = table_ax.table(cellText=table_content, loc='center', colLabels=table_header, cellLoc='left')
fig.show()
Run Code Online (Sandbox Code Playgroud)
(别介意奇怪的裁剪,它不会发生在我真正的桌子上.)
我试过的是这个:
prop = the_table.properties()
cells = prop['child_artists']
for cell in cells:
text = cell.get_text()
if text == "ID":
cell.set_width(0.1)
else:
try:
int(text)
cell.set_width(0.1)
except TypeError:
pass
Run Code Online (Sandbox Code Playgroud)
上面的代码似乎没有效果 - 列仍然都是相同的宽.(cell.get_width()返回0.3333333333,所以我认为这width确实是单元格宽度......所以我做错了什么?
任何帮助,将不胜感激!
小智 12
我一直在网上搜索,寻找类似的probelm sollutions.我找到了一些答案并使用了它们,但我没有发现它们很直接.我只是在尝试不同的表方法时才发现表方法get_celld.通过使用它,你得到一个字典,其中键是元组位置对应于表坐标的元组.所以通过写作
cellDict=the_table.get_celld()
cellDict[(0,0)].set_width(0.1)
Run Code Online (Sandbox Code Playgroud)
你只需要左上角的单元格.现在循环遍历行或列将非常容易.
回答有点晚,但希望其他人可能会得到帮助.
只为完成。列标题以 (0,0) ... (0, n-1) 开头。行标题以 (1,-1) ... (n,-1) 开头。
---------------------------------------------
| ColumnHeader (0,0) | ColumnHeader (0,1) |
---------------------------------------------
rowHeader (1,-1) | Value (1,0) | Value (1,1) |
--------------------------------------------
rowHeader (2,-1) | Value (2,0) | Value (2,1) |
--------------------------------------------
Run Code Online (Sandbox Code Playgroud)
编码:
for key, cell in the_table.get_celld().items():
print (str(key[0])+", "+ str(key[1])+"\t"+str(cell.get_text()))
Run Code Online (Sandbox Code Playgroud)