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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何更改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)

他们都没有解决问题或引发错误。

答案

alpha afaik不适用于桌子,但你可以改变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(元素的垂直顺序)使表格显示在图表的顶部。这不允许半透明表,但至少是解决方案使网格线消失。

另一答案

要设置表格的alpha,您需要设置每个单元格的alpha。不幸的是,表本身的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 one的效果,可以将表格着色,例如穿蓝色衣服。完整的例子:

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

以上是关于如何更改Matplotlib表的透明度/不透明度?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Matplotlib 设置图形背景颜色的不透明度

Matplotlib:如何在非透明线边缘处拥有透明的盒子图?

如何使用标签和刻度区域透明而不是matplotlib中的主绘图区域保存绘图?

如何更改 Qt MainWindow 的不透明度?

如何从具有透明背景的 matplotlib 导出绘图?

如何使用 javascript 和按钮更改图像的不透明度?