如何更改Matplotlib表的透明度/不透明度?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何更改Matplotlib表的透明度/不透明度?相关的知识,希望对你有一定的参考价值。
目的:使matplotlib.pyplot.table
不透明,使背景图的主要和次要网格线不出现在前景表中。
问题:我无法正确操作matplotlib.pyplot.table
kwarg alpha
或matplotlib.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()
产生以下内容:
尝试:
我试图通过在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()
以上是关于如何更改Matplotlib表的透明度/不透明度?的主要内容,如果未能解决你的问题,请参考以下文章
Matplotlib:如何在非透明线边缘处拥有透明的盒子图?