目标:使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)
他们都没有解决问题或提出错误。
答案 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()