Is it possible to plot a table with a multi-index using matplotlib the same way pandas displays out the table? The most I found on web was this open git issue from 2012.
Given the following example data frame:
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:
However when I try to create a table out of this using the following example:
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()
I get the following ploted as a table(Note the left index isn't the same):
A bit of an incomplete answer
Matplotlib.table.table
that is called by pandas.tools.plotting.table
iterates through the MultiIndex of the dataframe, that returns the tuples as shown in the table. I checked the source code of both functions and it seems that it is currently they don't suppport any form of multirow or multicolumn table.
If the table is a standalone one, why not use, for example, df.to_html()
that supports multiindexes?
<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>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With