Python 3.x 在设置背景色的同时,是否可以自定义matplotlib表格单元格的可见边?

Python 3.x 在设置背景色的同时,是否可以自定义matplotlib表格单元格的可见边?,python-3.x,matplotlib,Python 3.x,Matplotlib,我希望将matplotlib表覆盖在具有网格的绘图上,即该表应在网格上隐藏其后面的任何内容 我还希望边框看起来更像是每行都有边框,而不是每个单元格周围都有边框。但是,设置单元格的可见边似乎会破坏填充 举例说明 import matplotlib.pyplot as plt import numpy as np # a plot with a grid x = np.linspace(0, 10, 11) y = x ** 2 plt.plot(x, y) plt.grid() # a tab

我希望将matplotlib表覆盖在具有网格的绘图上,即该表应在网格上隐藏其后面的任何内容

我还希望边框看起来更像是每行都有边框,而不是每个单元格周围都有边框。但是,设置单元格的可见边似乎会破坏填充

举例说明

import matplotlib.pyplot as plt
import numpy as np

# a plot with a grid
x = np.linspace(0, 10, 11)
y = x ** 2
plt.plot(x, y)
plt.grid()

# a table on the same axis with a visible background colour
col_labels = ['col1', 'col2', 'col3']
row_labels = ['row1', 'row2', 'row3']
table_vals = [[11, 12, 13], [21, 22, 23], [31, 32, 33, ]]
colours = [['c'] * 3] * 3

the_table = plt.table(cellText=table_vals,
                      colWidths=[0.1] * len(col_labels),
                      cellColours=colours,
                      rowLabels=row_labels,
                      bbox=(0.8, 0.8, 0.2, 0.2))

# bump the zorder up so it occludes the underlying chart
the_table.set_zorder(1000)

# change the visible_edges to produce a row border effect
for row_idx, row in enumerate(table_vals):
    for col_idx, col in enumerate(row):
        edges = 'B'
        if col_idx == 0:
            edges += 'L'
        elif col_idx == 2:
            edges += 'R'
        the_table[row_idx, col_idx].visible_edges = edges

plt.show()
结果是单元格填充不一致,网格仍然可见

如果删除对可见边的更改,则它将按预期填充

有没有办法将这两种效果结合起来


(使用matplotlib 2.2.3创建的示例)

即使没有最后两个for循环,但保留了
表,您的代码对我来说也可以正常工作。在
2.2.2
上设置\u zorder(1000)
对此没有直接的解决方案。你所能做的最好的办法可能是根本不填充单元格,而是在表格后面生成一个所需颜色的矩形。问题是看不见的边是不可见的。要解决这个问题,需要使
单元
类由两个形状组成,一个用于线条,一个用于边缘。