web-dev-qa-db-fra.com

Comment tracer uniquement une table dans Matplotlib?

Est-il possible de ne dessiner qu'une table avec matplotlib? Si je dégage la ligne 

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

de cet exemple code , le tracé est toujours visible. Je veux avoir une table au-dessus de ma fenêtre (PyQt) et sous un graphique (avec un espace entre les deux).

14
snowflake

Si vous voulez juste changer le exemple et mettre la table en haut, alors loc='top' dans la déclaration de table est ce dont vous avez besoin,

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

Puis en ajustant l'intrigue avec,

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

Une option plus flexible consiste à placer la table dans son propre axe à l’aide de sous-graphes, 

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

qui ressemble à ceci,

 enter image description here

Vous êtes alors libre d’ajuster les emplacements de l’axe selon le besoin requis .

18
Ed Smith

Ceci est une autre option pour écrire un fichier de données pandas directement dans une table 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

10
Cord Kaldemeyer

Vous ne savez pas si cela a déjà été répondu, mais si vous souhaitez uniquement un tableau dans une fenêtre de figure, vous pouvez masquer les 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')
4
Ryszard Cetnarski

Tu peux le faire:

#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
Apostolos