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