使用多索引绘制 matplotlib 表

2023-11-22

是否可以使用 matplotlib 绘制具有多索引的表格,就像 pandas 显示表格一样?我在网上找到最多的是这个打开 2012 年的 git 问题.

给出以下示例数据框:

arrays = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'],
          ['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']]

tuples = list(zip(*arrays))
index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])
df = pd.DataFrame(np.random.randn(8, 4), index=arrays)

Which prints as follows: enter image description here

但是,当我尝试使用以下示例创建一个表时:

fig=plt.figure(figsize=(9.5, 11))
plt.gca().axis('off')
matplotlib_tab = pd.tools.plotting.table(plt.gca(),
                                         df, 
                                        loc='upper center', 
                                        colWidths=[0.25]*len(df.columns))    

table_props=matplotlib_tab.properties()
table_cells=table_props['child_artists']
for cell in table_cells:
    cell.set_height(0.024)
    cell.set_fontsize(12)

fig.text(4.25/8.5, 10.5/11., 'plot', ha='center', fontsize=12)
plt.plot()

我将以下内容绘制为表格(请注意,左侧索引不相同):

enter image description here


有点不完整的答案Matplotlib.table.table被称为pandas.tools.plotting.table迭代数据帧的 MultiIndex,返回表中所示的元组。我检查了这两个函数的源代码,目前它们似乎不支持任何形式的多行或多列表。

如果该表是一个独立的表,为什么不使用,例如,df.to_html()支持多索引?

<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th></th>
      <th>0</th>
      <th>1</th>
      <th>2</th>
      <th>3</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th rowspan="2" valign="top">bar</th>
      <th>one</th>
      <td>0.578703</td>
      <td>1.499785</td>
      <td>-1.144682</td>
      <td>0.957464</td>
    </tr>
    <tr>
      <th>two</th>
      <td>1.116768</td>
      <td>0.291652</td>
      <td>-0.095254</td>
      <td>0.131653</td>
    </tr>
    <tr>
      <th rowspan="2" valign="top">baz</th>
      <th>one</th>
      <td>-1.119140</td>
      <td>0.245226</td>
      <td>0.453203</td>
      <td>-1.827160</td>
    </tr>
    <tr>
      <th>two</th>
      <td>0.442228</td>
      <td>0.160754</td>
      <td>1.199452</td>
      <td>0.767720</td>
    </tr>
    <tr>
      <th rowspan="2" valign="top">foo</th>
      <th>one</th>
      <td>0.621110</td>
      <td>0.334196</td>
      <td>1.854065</td>
      <td>0.505222</td>
    </tr>
    <tr>
      <th>two</th>
      <td>-0.269477</td>
      <td>1.294712</td>
      <td>0.421114</td>
      <td>0.018712</td>
    </tr>
    <tr>
      <th rowspan="2" valign="top">qux</th>
      <th>one</th>
      <td>-1.736962</td>
      <td>-2.627593</td>
      <td>-0.843875</td>
      <td>-2.108532</td>
    </tr>
    <tr>
      <th>two</th>
      <td>-1.200400</td>
      <td>-0.319079</td>
      <td>0.529251</td>
      <td>-1.928900</td>
    </tr>
  </tbody>
</table>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用多索引绘制 matplotlib 表 的相关文章

随机推荐