【问题标题】:How can I place a table on a plot in Matplotlib?如何在 Matplotlib 中的绘图上放置表格?
【发布时间】:2012-01-21 09:40:53
【问题描述】:

我没有成功让 matplotlib 表命令工作。这是我想做的一个例子:

任何人都可以帮助提供表格构造代码吗?

import pylab as plt

plt.figure()
ax=plt.gca()
y=[1,2,3,4,5,4,3,2,1,1,1,1,1,1,1,1]
plt.plot([10,10,14,14,10],[2,4,4,2,2],'r')
col_labels=['col1','col2','col3']
row_labels=['row1','row2','row3']
table_vals=[11,12,13,21,22,23,31,32,33]
# the rectangle is where I want to place the table
plt.text(11,4.1,'Table Title',size=8)
plt.plot(y)
plt.show()

【问题讨论】:

  • 您是否尝试过查看this 示例?或者你甚至可以做一些事情similar,但是你有一个表格而不是注释。
  • 是的,我看到了那个例子。当我尝试使用代码时,我无法分配行颜色和位置。我也找不到关于调用的语法或类型的任何文档帮助。至于注释,我相信有更多的控制指定第二个轴来绘制表格。

标签: python matplotlib


【解决方案1】:

AFAIK,您不能任意仅使用原生 matplotlib 功能在 matplotlib 图上放置表格。您可以做的是利用latex text rendering 的可能性。但是,为了做到这一点,您的系统中应该有工作 latex 环境。如果你有,你应该能够生成如下图:

import pylab as plt
import matplotlib as mpl

mpl.rc('text', usetex=True)
plt.figure()
ax=plt.gca()
y=[1,2,3,4,5,4,3,2,1,1,1,1,1,1,1,1]
#plt.plot([10,10,14,14,10],[2,4,4,2,2],'r')
col_labels=['col1','col2','col3']
row_labels=['row1','row2','row3']
table_vals=[11,12,13,21,22,23,31,32,33]
table = r'''\begin{tabular}{ c | c | c | c } & col1 & col2 & col3 \\\hline row1 & 11 & 12 & 13 \\\hline row2 & 21 & 22 & 23 \\\hline  row3 & 31 & 32 & 33 \end{tabular}'''
plt.text(9,3.4,table,size=12)
plt.plot(y)
plt.show()

结果是:

请记住,这是一个简单粗暴的例子;您应该能够通过使用文本坐标正确放置表格。如需更改字体等,也请参考docs

更新:更多关于pyplot.table

根据documentationplt.table向当前坐标区添加了一个表格。从来源很明显,图表上的表格位置是相对于轴确定的。 Y坐标可以通过关键字top(上图)、upper(上半部分)、center(中间)、lower(下半部分)和bottom(下图)。 X 坐标由关键字leftright 控制。两种作品的任意组合,例如top leftcenter rightbottom 中的任何一个都可以使用。

所以最接近你想要的图表可以用:

import matplotlib.pylab as plt

plt.figure()
ax=plt.gca()
y=[1,2,3,4,5,4,3,2,1,1,1,1,1,1,1,1]
#plt.plot([10,10,14,14,10],[2,4,4,2,2],'r')
col_labels=['col1','col2','col3']
row_labels=['row1','row2','row3']
table_vals=[[11,12,13],[21,22,23],[31,32,33]]
# the rectangle is where I want to place the table
the_table = plt.table(cellText=table_vals,
                  colWidths = [0.1]*3,
                  rowLabels=row_labels,
                  colLabels=col_labels,
                  loc='center right')
plt.text(12,3.4,'Table Title',size=8)

plt.plot(y)
plt.show()

这给了你

希望这会有所帮助!

【讨论】:

  • 谢谢安德烈,这确实为问题提供了一个可行的解决方案。但是我在 matplotlib 中找不到任何关于 pyplot.table 或 matplotlib.Table.table 功能的讨论/文档。我希望看到有人明确解决表格问题。
  • 如果您想在 pyplot.table 上查看更多内容,请查看更新。
  • 谢谢安德烈!您不仅清楚而完整地回答了这个问题,而且我完全错过了 matplotlib.pyplot.table 文档。感谢您的明确回答和指导。
  • 嗨,Andrey,我想知道是否可以将表格拖出坐标轴?
  • 谢谢! loc 的所有可用值都不能让我满意,但我找到了一种解决方法:添加一个 sub_plot 并将表格绘制到该图中,然后将子图设置为不可见。因为我可以重新定位子图,这意味着我可以在任何地方找到表格。
【解决方案2】:

我不确定前面的答案是否满足您的问题,我也在寻找一种在绘图中添加表格的方法,并找到了克服“loc”限制的可能性。您可以使用边界框来控制表格的确切位置(这仅包含表格创建但应该足够了):

        tbl = ax1.table(
            cellText=[["a"], ["b"]],
            colWidths=[0.25, 0.25],
            rowLabels=[u"DATA", u"WERSJA"],
            loc="bottom", bbox=[0.25, -0.5, 0.5, 0.3])

        self.ui.main_plot.figure.subplots_adjust(bottom=0.4)

结果是(我没有发布图片的声誉,所以这里有一个链接):http://www.viresco.pl/media/test.png

请注意,bbox 单位是标准化的(不是按绘图比例)。

【讨论】:

  • 在撰写本文时链接已损坏。
猜你喜欢
  • 1970-01-01
  • 2021-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-20
  • 1970-01-01
相关资源
最近更新 更多