首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Matplotlib表:单个列宽度

Matplotlib表:单个列宽度
EN

Stack Overflow用户
提问于 2012-09-19 15:56:15
回答 3查看 8K关注 0票数 4

有没有办法指定matplotlib表中单个列的宽度?

我的表中的第一列只包含2-3位数字的it,我希望这一列比其他列小,但我似乎无法让它工作。

假设我有一个这样的表:

代码语言:javascript
复制
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()

(不要管奇怪的裁剪,它不会发生在我的真实表格中。)

我尝试的是这样的:

代码语言:javascript
复制
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实际上是单元格宽度...那么我到底做错了什么呢?

任何帮助都将不胜感激!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-29 17:24:48

我一次又一次地在网上搜索,寻找类似的问题解决方案。我已经找到了一些答案并使用了它们,但我发现它们并不是很直接。在尝试不同的表方法时,我偶然发现了表方法get_celld。通过使用它,您可以获得一个字典,其中的键是元组,对应于单元格位置中的表坐标。所以通过写

代码语言:javascript
复制
cellDict=the_table.get_celld()
cellDict[(0,0)].set_width(0.1)

您只需访问左上角的单元格。现在循环遍历行或列将会相当容易。

回答有点晚了,但希望其他人能有所帮助。

票数 12
EN

Stack Overflow用户

发布于 2017-03-17 16:05:49

只是为了完成。列标题以(0,0) ... (0,n-1)开头。行标题以(1,-1)开头...(n,-1)。

代码语言:javascript
复制
                  ---------------------------------------------
                  | ColumnHeader (0,0)  | ColumnHeader (0,1)  |
                  ---------------------------------------------
rowHeader (1,-1)  | Value  (1,0)        | Value  (1,1)        |
                   --------------------------------------------
rowHeader (2,-1)  | Value  (2,0)        | Value  (2,1)        |
                   --------------------------------------------

代码:

代码语言:javascript
复制
for key, cell in the_table.get_celld().items():
    print (str(key[0])+", "+ str(key[1])+"\t"+str(cell.get_text()))
票数 5
EN

Stack Overflow用户

发布于 2012-09-19 17:42:08

Condition text=="ID"始终为False,因为cell.get_text()返回的是Text对象而不是字符串:

代码语言:javascript
复制
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()属性,因此可以像这样得到一个单元格的字符串:

代码语言:javascript
复制
    text = cell.get_text().get_text() # yup, looks weird
    if text == "ID":
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12490596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档