2017-06-15 10 views
0

Plotten Ich habe eine Pandas Datenrahmen mit mehreren Spalten wie folgt:Pandas Datenrahmen Spalten sortiert, während

columns_all = pd.DataFrame({'m1_h':m1_hist, 'm2_h':m2_hist, ....... 'm6_h':m6_hist, 'm6_f':m6_futu}) 

und ich verwende folgenden Histogramme in jeder Spalte plotten basiert aber Spalten sortiert werden, aber Ich mag alle Histogramme haben, in gleiche Reihenfolge wie im obigen Datenrahmen geschriebene Spalten:

columns_all.hist(layout=(2,6), sharey=True, sharex=True) 
plt.ylim(0, 100) 
plt.xlim(0, 150) 
plt.show() 

Schätzen Sie jeden Vorschlag, die Reihenfolge der Spalten beim Plotten beizubehalten.

Antwort

1

zu the source code Nach der Sortierung definiert von _try_sort(data.columns) und kann nicht durch ein Argument geändert werden. Sie können was tun Claudiu Creanga suggested. In meinem Test wird Ihnen das jedoch kein (2, 6) Layout geben. Wenn Sie wirklich, dass das Layout wollen und was pandas.DataFrame.hist der Fall ist, kann der folgende Code hilfreich sein:

from matplotlib import pyplot as plt 
import numpy as np 
import pandas as pd 

columns_all = pd.DataFrame([np.random.randn(1000)] * 7).T 
columns_all.columns = ['m1_h', 'm2_h', 'm3_h', 'm4_h', 'm5_h', 'm6_h', 'm6_f'] 
plt.clf() 
fig = plt.figure(figsize=(16, 4)) 
axarr = [] 
for i, col in enumerate(columns_all.columns): 
    if i // 6 > 0: 
     sharex = axarr[i % 6] 
     plt.setp(axarr[i % 6].get_xticklabels(), visible=False) 
    else: 
     sharex = None 
    if i % 6 > 0: 
     sharey = axarr[i // 6] 
    else: 
     sharey = None 
    ax = fig.add_subplot(2, 6, i + 1, sharex=sharex, sharey=sharey) 
    axarr.append(ax) 
    if i % 6 > 0: 
     plt.setp(ax.get_yticklabels(), visible=False) 
    ax.hist(columns_all[col].dropna().values) 
    ax.set_title(col) 
    ax.grid(True) 
fig.subplots_adjust(wspace=0.3, hspace=0.3) 
plt.show() 

enter image description here

+0

es funktionierte nach Bedarf – Ibe

1

Sie Anrufe auf einzelne Spalten wiederholt machen könnte, da beide auf die Schaffung der Datenrahmen und auf der .hist() gibt es eine Nachbestellung erfolgt automatisch:

s = pd.DataFrame([{'B': 1.5, 'A':3, 'C': 4, 'D':2}]) 
s 

    A B C D 
0 3 1.5 4 2 

s = s[["B", "A", "C", "D"]] #chose your order 
s 

    B A C D 
0 1.5 3 4 2 

for x in s.columns: 
    s[[x]].hist(layout=(2,6), sharey=True, sharex=True) 
plt.ylim(0, 100) 
plt.xlim(0, 150) 
plt.show() 
Verwandte Themen