Python 将外观合理的表格添加到matplotlib轴(HTML?)

Python 将外观合理的表格添加到matplotlib轴(HTML?),python,matplotlib,pandas,Python,Matplotlib,Pandas,我想做一个两部分的图形。在左边,我想要一个可视化(我已经知道如何制作)。在右边,我想放置一个表格,其中包含更多关于图表所涵盖的同一主题的数字数据。假设我使用轴[0]设置可视化,并将轴[1]设置为我想要桌子的位置 我使用的是Pandas,我在一个漂亮整洁的数据框中拥有我想要的所有表格信息。(现在,让我们假设DataFrame在行和列上都有一个常规的索引,而不是多索引,但我很好奇,如果我们放弃这个假设,答案会发生什么变化。)让我们称之为tabledf 最简单的方法是使用表格DF并在轴[1]上绘制它?

我想做一个两部分的图形。在左边,我想要一个可视化(我已经知道如何制作)。在右边,我想放置一个表格,其中包含更多关于图表所涵盖的同一主题的数字数据。假设我使用轴[0]设置可视化,并将轴[1]设置为我想要桌子的位置

我使用的是Pandas,我在一个漂亮整洁的
数据框中拥有我想要的所有表格信息。(现在,让我们假设
DataFrame
在行和列上都有一个常规的
索引,而不是
多索引,但我很好奇,如果我们放弃这个假设,答案会发生什么变化。)让我们称之为
tabledf

最简单的方法是使用
表格DF
并在
轴[1]
上绘制它?特别是,如果它看起来像
tabledf
的HTML表示,那就太好了。有没有办法在matplotlib轴集上绘制HTML表格

我当然可以这样做:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np

np.random.seed(1)

tabledf = pd.DataFrame(data=np.random.randn(5,3),
                       index=list('abcde'),
                       columns=list('xyz'))



fig, axes = plt.subplots(1, 2, figsize=(20, 5))
x = np.linspace(0, 2*np.pi, 100)
axes[0].plot(x, np.sin(x))
axes[1].axis('off')
axes[1].table(cellText=tabledf.values, loc='center')
这让我感到:

我有两个问题。1) 太可怕了。2) 如果我想将行标签和列标签移植到这个结构上,我必须进行大量的数组粘合。我想一定有更好的办法


编辑:理想情况下,右侧的表格部分看起来就像
tabledf
的默认HTML表示形式:


好吧,使用HTML和
matplotlib
没有简单的方法。然而,你应该可以用乳胶来做

import matplotlib.pyplot as plt
import matplotlib as mpl

mpl.rcParams["text.usetex"] = True
mpl.rcParams["text.latex.preamble"].append(r'\usepackage{tabularx}')

fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot([0,1], [1,0])

ax.text(.5, .5, r'''\begin{tabular}{ | l | l | l | l | } \hline & x & y & z \\\hline a & 1.62 & -0.61 & -0.528 \\\hline \end{tabular}''')
创建:

当然,您可以也应该使用一些简单的代码从数据生成表。乳胶桌子非常灵活,一旦你掌握了它们的建造方式


要使上述解决方案起作用,您需要在您的计算机中配置一个配置良好的LaTeX发行版。

谢谢您的建议。我对用LaTeX生成表相当熟悉。我的经验是这有点痛苦。它看起来像熊猫。DataFrame
有一个
to\u latex
方法。看来这是我下一个应该去的地方。@8one6:如果你不喜欢表格格式,你可以使用任何乳胶包装。
到_latex
的输出是
booktab
包的IIRC。但是,请注意,
matplotlib
LaTeX系统不一定喜欢换行符,因此您可能需要将
\n
替换为
给\u LaTeX
的字符串中的空格。IMHO精心设计的乳胶桌子看起来很不错。通常,诀窍是减少线条的数量(水平线通常是不必要的),但这是一个品味的问题。