Matplotlib 表 - 将不同的文本对齐方式分配给不同的列

2024-05-22

我正在创建一个两栏表,并希望文本尽可能接近。如何指定第一列右对齐,第二列左对齐?

我尝试将常规 cellloc 设置到一侧(cellloc 设置文本对齐方式)

from matplotlib import pyplot as plt

data = [['x','x'] for x in range(10)]
bbox = [0,0,1,1]

tb = plt.table(cellText = data, cellLoc='right', bbox = bbox)
plt.axis('off') # get rid of chart axis to only show table

然后循环遍历第二列中的单元格以将它们设置为左对齐:

for key, cell in tb.get_celld().items():
    if key[1] == 1: # if the y value is equal to 1, meaning the second column
        cell._text.set_horizontalalignment('left') # then change the alignment

上面的循环不起作用,文本保持右对齐。

我错过了什么吗?或者这是不可能的?

EDIT

我的一种解决方法是将数据分成两个不同的列表,每一列一个。这产生了我正在寻找的结果,但我想知道是否有人知道另一种方法。

data_col1 = [xy[0] for xy in data]
data_col2 = [xy[1] for xy in data] 

tb = plt.table(cellText = data_col2, rowLabels=data_col1, cellLoc='left', rowLoc='right', bbox = bbox)

您需要设置表格单元格内文本的位置,而不是设置文本本身的对齐方式。这是由细胞的._loc属性。

def set_align_for_column(table, col, align="left"):
    cells = [key for key in table._cells if key[1] == col]
    for cell in cells:
        table._cells[cell]._loc = align
        table._cells[cell]._text.set_horizontalalignment('left') 

一些完整的例子:

from matplotlib import pyplot as plt

data = [['x','x'] for x in range(10)]
bbox = [0,0,1,1]

tb = plt.table(cellText = data, cellLoc='right', bbox = bbox)
plt.axis('off') # get rid of chart axis to only show table

def set_align_for_column(table, col, align="left"):
    cells = [key for key in table._cells if key[1] == col]
    for cell in cells:
        table._cells[cell]._loc = align
        table._cells[cell]._text.set_horizontalalignment('left') 

set_align_for_column(tb, col=0, align="right")
set_align_for_column(tb, col=1, align="left")
        
plt.show()

(此处使用的方法类似于更改单元格填充,如本问题所示:Matplotlib 表格中的文本对齐 https://stackoverflow.com/questions/44798364/matplotlib-text-alignment-in-table?rq=1)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Matplotlib 表 - 将不同的文本对齐方式分配给不同的列 的相关文章

随机推荐