2017-03-13 36 views
6

örnek verilerin Bir yıl:Yan yana boxplot

import pandas as pd 
import numpy.random as rnd 
import seaborn as sns 
n = 365 
df = pd.DataFrame(data = {"A":rnd.randn(n), "B":rnd.randn(n)+1}, 
        index=pd.date_range(start="2017-01-01", periods=n, freq="D")) 

Ben bu veriler yan yana ayda (yani iki kutu başına göre gruplandırılmış Boxplot istiyorum ay, bir A için ve bir tane B için). Tek bir sütun için sns.boxplot(df.index.month, df["A"]) düzgün çalışıyor. Ancak, sns.boxplot(df.index.month, df[["A", "B"]]) bir hata atar (ValueError: cannot copy sequence with size 2 to array axis with dimension 365). Bir geçici çözüm olarak denizaltının hue özelliğini kullanmak için verileri indeksle (pd.melt(df, id_vars=df.index, value_vars=["A", "B"], var_name="column")) eritmek de işe yaramıyor (TypeError: unhashable type: 'DatetimeIndex').

(. Sade matplotlib kullanarak daha kolay ise bir çözüm mutlaka Seaborn kullanmaya gerek yoktur)

/düzenle: Ben temelde ne istiyorum üretir geçici bir çözüm buldu. Bununla birlikte, DataFrame, çizmek istediğimden daha fazla değişken içerdiğinde, birlikte çalışmak biraz garip hale gelir. Yani daha zarif/doğrudan bir yolu varsa, lütfen paylaşın!

df_stacked = df.stack().reset_index() 
df_stacked.columns = ["date", "vars", "vals"] 
df_stacked.index = df_stacked["date"] 
sns.boxplot(x=df_stacked.index.month, y="vals", hue="vars", data=df_stacked) 

üretir: Side-by-side boxplot of A and B, grouped by month.

cevap

0

Tamamen sorunuzu anlamıyorum ama matplotlib kullanarak bu yaklaşımın bakmak için olabilir. Ancak en iyi çözüm değil. Burada bu)

for _ in range(12): 
    DFList[_].plot(kind='box', subplots=True, layout=(2,2), sharex=True, sharey=True, figsize=(7,7)) 

plt.show() 

3:

1) month s ile 12 DataFrames içine df Break bir listede istiflenmiş

DFList = [] 
for group in df_3.groupby(df_3.index.month): 
    DFList.append(group[1]) 

2) onları bir döngü içinde birbiri ardına Konu 1 üç satır anlık:

enter image description here

Ayrıca cevap add_subplot method

+0

Teşekkür matplotlib 'ın ödeme isteyebilirsiniz. Üzgünüm, ana mesajım açık değilse. İyileştirmeme yardım edersen memnun olurum. Ben ne demek istediğimi açıklığa kavuşturmak için bir dakika içinde orijinal yazıya bulduğum bir geçici çözümü/çözümü düzenleyeceğim. –