如何更改Matplotlib表的透明度/不透明度?

时间:2018-07-12 15:02:10

标签: python matplotlib

目标:使matplotlib.pyplot.table 不透明,以使背景图的主要和次要网格线不会出现在其中前景表。

问题:我无法正确操作matplotlib.pyplot.table kwarg alphamatplotlib.artist.Artist.set_alpha函数来更改绘图中绘制的表格的透明度。

MWE :请考虑以下示例代码,作为问题的答案:How can I place a table on a plot in Matplotlib?

import matplotlib.pylab as plt

plt.figure()
ax=plt.gca()
plt.grid('on', linestyle='--')
y=[1,2,3,4,5,4,3,2,1,1,1,1,1,1,1,1]
col_labels=['col1','col2','col3']
row_labels=['row1','row2','row3']
table_vals=[[11,12,13],[21,22,23],[31,32,33]]
#
the_table = plt.table(cellText=table_vals,
                  colWidths = [0.1]*3,
                  rowLabels=row_labels,
                  colLabels=col_labels,
                  loc='center right')
plt.plot(y)
plt.show()

产生以下内容:

matplotlib-table

尝试

我试图通过在alpha中添加plt.table关键字来消除表格中的背景网格线:

the_table = plt.table(cellText=table_vals,
                  colWidths = [0.1]*3,
                  rowLabels=row_labels,
                  colLabels=col_labels,
                  loc='center right',
                  alpha=1.0)

,然后致电set_alpha

the_table.set_alpha(1.0)

他们都没有解决问题或提出错误。

2 个答案:

答案 0 :(得分:4)

alpha确实不适用于表格,但是您可以更改zorder

the_table = plt.table(cellText=table_vals,
                  colWidths = [0.1]*3,
                  rowLabels=row_labels,
                  colLabels=col_labels,
                  loc='center right', zorder=3)

matplotlib.axes.Axes.table中提到了关键字参数alpha。但这似乎没有效果。
更改zorder(元素的垂直顺序)会使表格显示在绘图的顶部。这不允许使用半透明表,但至少是一种解决方法,可以使网格线消失。

答案 1 :(得分:1)

要设置表格的字母,您需要设置每个单元格的字母。不幸的是,表本身的alpha参数被忽略(首先出现在表中的原因仅仅是表接受了所有matplotlib.artist.Artist接受的所有参数,但并未全部使用它们。)

要设置单元格Alpha,例如:

for cell in the_table._cells:
    the_table._cells[cell].set_alpha(.5)

当然,这只有在您首先确保表格位于网格线的上方时才有意义。可以使用zorder参数来完成此操作-zorder越高,表格的前面越多。网格线默认为zorder 1,因此大于1的任何数字都可以。

the_table = plt.table(...,  zorder=2)

要查看alpha的效果,可以使表格变色,例如穿蓝色衣服。完整示例:

import matplotlib.pylab as plt

plt.figure()
ax=plt.gca()
plt.grid('on', linestyle='--')
y=[1,2,3,4,5,4,3,2,1,1,1,1,1,1,1,1]
col_labels=['col1','col2','col3']
row_labels=['row1','row2','row3']
table_vals=[[11,12,13],[21,22,23],[31,32,33]]
#
colors = [["b"]*3 for _ in range(3)]
the_table = plt.table(cellText=table_vals,
                  colWidths = [0.1]*3,
                  rowLabels=row_labels,
                  colLabels=col_labels,
                  loc='center right', zorder=2, 
                  cellColours=colors)

for cell in the_table._cells:
    the_table._cells[cell].set_alpha(.7)

plt.plot(y)
plt.show()

enter image description here