簡體   English   中英

遍歷DataFrame類別列以創建子圖

[英]Iterate through DataFrame categorical columns to create subplots

我正在嘗試為預定的x和y數據創建Subplots網格。 函數應遍歷pandas DataFrame,標識類別變量,並為給定類別變量的每個級別用一行繪制x和y數據。 地塊的數量等於分類變量的數量,並且每個地塊上的行數應反映該變量的類別數量。

最初,我試圖在給定類別變量的For循環中對Dataframe進行分組,但結果有些復雜。 我認為我的問題是如何分配繪制線條的軸。


def grouping_for_graphs(df,x_col, y_col,category,func):
    '''
    funtion to group dataframe given a variable and 
    aggregation function

    '''
    X = df[x_col].name
    y = df[y_col].name
    category = df[category].name

    df_grouped = df.groupby([X, category])[y].apply(func)
    return df_grouped.reset_index()


# create a list of categorical variables to plot
cat_list = []
col_list = list(df.select_dtypes(include = ['object']).columns)

for col in col_list:
    if len(df[col].unique()) < 7:
        cat_list.append(col)


# create plots and axes
fig, axs = plt.subplots(2, 2, figsize=(30,24))
axs = axs.flatten()
# pick plot function
plot_func = plt.plot

# plot this
for ax, category in zip(axs, cat_list):
    df_grouped = grouping_for_graphs(df,x_col, y_col,category,agg_func)
    x_col = df_grouped.columns[0]
    y_col = df_grouped.columns[-1]
    category = str(list(df_grouped.columns.drop([x_lab, y_lab]))[0])
    for feature in list(df_grouped[category].unique()):
        X = df_grouped[df_grouped[category] == feature][x_col]
        y = df_grouped[df_grouped[category] == feature][y_col]
        ax.plot = plot_func(X,y)
        ax.set_xlabel(x_col)
        ax.set_ylabel(y_col)
        ax.set_title(feature)

除了得到ax.plot是“列表”對象且不可調用的錯誤外,所有繪制的線都放在子圖的最終圖上。

我對您的plot_func感到困惑。 刪除它並直接使用ax.plot(X, y)進行ax.plot(X, y) 修改后的行以注釋突出顯示

fig, axs = plt.subplots(2, 2, figsize=(30,24))
axs = axs.flatten()

for ax, category in zip(axs, cat_list):
    df_grouped = grouping_for_graphs(df,x_col, y_col,category,agg_func)
    x_col = df_grouped.columns[0]
    y_col = df_grouped.columns[-1]
    category = str(list(df_grouped.columns.drop([x_lab, y_lab]))[0])
    for feature in list(df_grouped[category].unique()):
        X = df_grouped[df_grouped[category] == feature][x_col]
        y = df_grouped[df_grouped[category] == feature][y_col]
        ax.plot(X,y) # <--- Modified here
        ax.set_xlabel(x_col)
        ax.set_ylabel(y_col)
        ax.set_title(feature)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM