2015-08-21 19 views
6

È possibile disegnare solo una tabella con matplotlib? Se io commento dalla rigasolo tabella Matlotlib

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

di questo esempio code, la trama è ancora visibile. Voglio avere una tabella sopra la mia finestra (PyQt) e sotto una trama (con uno spazio intermedio).

Qualsiasi aiuto è molto apprezzato!

risposta

8

Se si voleva solo per cambiare il example e mettere il tavolo in alto, poi loc='top' nella dichiarazione tavolo è quello che ti serve,

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

Poi la regolazione della trama con,

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

Un'opzione più flessibile è mettere la tabella sul proprio asse utilizzando sottotrame,

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() 

che assomiglia a questo,

enter image description here

si sono quindi liberi di regolare le posizioni degli assi come required.

+0

Grande risposta, grazie! – snowflake

4

Non so se questo è già una risposta, ma se si desidera solo un tavolo in una finestra figura, allora è possibile nascondere gli assi:

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') 
3

Questa è un'altra opzione per scrivere un dataframe panda direttamente in un tavolo matplotlib:

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

Problemi correlati