有没有办法指定matplotlib表中单个列的宽度?
我的表中的第一列只包含2-3位数字的it,我希望这一列比其他列小,但我似乎无法让它工作。
假设我有一个这样的表:
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()(不要管奇怪的裁剪,它不会发生在我的真实表格中。)
我尝试的是这样的:
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上面的代码似乎没有效果--所有的列仍然是相同的宽度。(cell.get_width()返回0.3333333333,所以我认为width实际上是单元格宽度...那么我到底做错了什么呢?
任何帮助都将不胜感激!
发布于 2013-11-29 17:24:48
我一次又一次地在网上搜索,寻找类似的问题解决方案。我已经找到了一些答案并使用了它们,但我发现它们并不是很直接。在尝试不同的表方法时,我偶然发现了表方法get_celld。通过使用它,您可以获得一个字典,其中的键是元组,对应于单元格位置中的表坐标。所以通过写
cellDict=the_table.get_celld()
cellDict[(0,0)].set_width(0.1)您只需访问左上角的单元格。现在循环遍历行或列将会相当容易。
回答有点晚了,但希望其他人能有所帮助。
发布于 2017-03-17 16:05:49
只是为了完成。列标题以(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) |
--------------------------------------------代码:
for key, cell in the_table.get_celld().items():
print (str(key[0])+", "+ str(key[1])+"\t"+str(cell.get_text()))发布于 2012-09-19 17:42:08
Condition text=="ID"始终为False,因为cell.get_text()返回的是Text对象而不是字符串:
for cell in cells:
text = cell.get_text()
print text, text=="ID" # <==== here
if text == "ID":
cell.set_width(0.1)
else:
try:
int(text)
cell.set_width(0.1)
except TypeError:
pass另一方面,直接寻址cells是可行的:试试cells[0].set_width(0.5)。
编辑:Text对象本身就有一个get_text()属性,因此可以像这样得到一个单元格的字符串:
text = cell.get_text().get_text() # yup, looks weird
if text == "ID":https://stackoverflow.com/questions/12490596
复制相似问题