2016-09-02 6 views
2

Ich kann meinen Single-Header Datenrahmen auf einer Figur mit diesem Code Grundstück:Python matplotlib Plot Tabelle mit mehreren Header

plt.table(cellText=df.round(4).values, cellLoc='center', bbox=[0.225, 1, 0.7, 0.15], 
    rowLabels=[' {} '.format(i) for i in df.index], rowLoc='center', 
    rowColours=['silver']*len(df.index), colLabels=df.columns, colLoc='center', 
    colColours=['lightgrey']*len(df.columns), colWidths=[0.1]*len(df.columns)) 

Meine Frage ist: ist es möglich, Grundstück eines Datenrahmen mit Multiindex Spalten? Ich möchte zwei separate "Zeilen" für meine Multi-Header, also Tupel in einer Kopfzeile ist nicht gut. Wenn es möglich ist, möchte ich die oben genannten Stile (Farben) auf beide Header anwenden (es wäre brillant, verschiedene Farben für die Multi-Header zu setzen). Hier

ist ein Beispiel Datenrahmen:

df = pd.DataFrame([[11, 22], [13, 23]], 
    columns=pd.MultiIndex.from_tuples([('main', 'sub_1'), ('main', 'sub_2')])) 

Ergebnis:

   main 
    sub_1 sub_2 
0  11  22 
1  13  23 

Antwort

1

OK, ich habe einen "Trick" verwendet, um dieses Problem zu lösen: Grundstück eine neue Tabelle mit nur einer Zelle, ohne Spalte Header und ohne Zeilenindex. Der einzige Zellenwert ist der ursprüngliche obere Header. Und legen Sie diese neue Tabelle an den Anfang der alten Tabelle (Single-Header). (Es ist nicht die beste Lösung, aber funktioniert ...).

Der Code:

df = pd.DataFrame([[11, 22], [13, 23]], columns=['sub_1', 'sub_2']) 

# First plot single-header dataframe (headers = ['sub_1', 'sub_2']) 
plt.table(cellText=df.round(4).values, cellLoc='center', bbox=[0.225, 1, 0.7, 0.15], 
    rowLabels=[' {} '.format(i) for i in df.index], rowLoc='center', 
    rowColours=['silver']*len(df.index), colLabels=df.columns, colLoc='center', 
    colColours=['lightgrey']*len(df.columns), colWidths=[0.1]*len(df.columns)) 

# Then plot a new table with one cell (value = 'main') 
plt.table(cellText=[['main']], cellLoc='center', bbox=[0.225, 1.15, 0.7, 0.05], 
    cellColours=[['Lavender']])