How to chart tables in Matplotlib?

Is it possible to draw only a table with matplotlib? If I uncomment the line

plt.bar(index, data[row], bar_width, bottom=y_offset, color=colors[row]) 

of this sample code , a graph is still displayed. I want to have a table on top of my window (PyQt) and under the plot (with some space between them).

+11
source share
4 answers

If you just want to change example and place the table at the top, then loc='top' in the table declaration is what you need,

 the_table = ax.table(cellText=cell_text, rowLabels=rows, rowColours=colors, colLabels=columns, loc='top') 

Then adjust the graph with

 plt.subplots_adjust(left=0.2, top=0.8) 

A more flexible option is to place the table on its own axis using subheadings,

 import numpy as np import matplotlib.pyplot as plt fig, axs =plt.subplots(2,1) clust_data = np.random.random((10,3)) collabel=("col 1", "col 2", "col 3") axs[0].axis('tight') axs[0].axis('off') the_table = axs[0].table(cellText=clust_data,colLabels=collabel,loc='center') axs[1].plot(clust_data[:,0],clust_data[:,1]) plt.show() 

which is as follows:

enter image description here

Then you can configure the axis layout as required .

+16
source

This is another option to write the pandas data frame directly to the matplotlib table:

 import numpy as np import pandas as pd import matplotlib.pyplot as plt fig, ax = plt.subplots() # hide axes fig.patch.set_visible(False) ax.axis('off') ax.axis('tight') df = pd.DataFrame(np.random.randn(10, 4), columns=list('ABCD')) ax.table(cellText=df.values, colLabels=df.columns, loc='center') fig.tight_layout() plt.show() 

enter image description here

+10
source

Not sure if this has already been answered, but if you want only the table in the shape window, you can hide the axes:

 fig, ax = plt.subplots() # Hide axes ax.xaxis.set_visible(False) ax.yaxis.set_visible(False) # Table from Ed Smith answer clust_data = np.random.random((10,3)) collabel=("col 1", "col 2", "col 3") ax.table(cellText=clust_data,colLabels=collabel,loc='center') 
+5
source

Can you do this:

 #axs[1].plot(clust_data[:,0],clust_data[:,1]) # Remove this if you don't need it axs[1].axis("off") # This will leave the table alone in the window 
+1
source

All Articles