遍历DataFrame类别列以创建子图

时间:2019-07-24 22:16:08

标签: python python-3.x pandas matplotlib

我正在尝试为预定的x&y数据创建Subplots网格。函数应遍历pandas DataFrame,标识类别变量,并为给定类别变量的每个级别用一行绘制x和y数据。地块的数量等于分类变量的数量,并且每个地块上的行数应反映该变量的类别数量。

我最初尝试将Dataframe在给定类别变量的For循环中分组,但是我得到了一些混合结果。我认为我的问题在于如何分配绘制线条的轴。

Notification mNotification;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    mNotification =
            new Notification.Builder(this, NOTIFICATION_CHANNEL_ID)
                    .setContentTitle("mobiChk II API Service")
                    .setContentText("Service is running")
                    .setSmallIcon(R.mipmap.ic_launcher_round)
                    .setContentIntent(pendingIntent)
                    .setTicker("mobiChk II API")
                    .build();
} else {
    mNotification =
            new NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID)
                    .setContentTitle("mobiChk II API Service")
                    .setContentText("Service is running")
                    .setSmallIcon(R.mipmap.ic_launcher_round)
                    .setSound(null)
                    .setContentIntent(pendingIntent)
                    .setTicker("mobiChk II API")
                    .build();
}

除了得到ax.plot是“列表”对象且不可调用的错误之外,所有绘制的线都放在子图的最终图上。

1 个答案:

答案 0 :(得分:0)

我对您的plot_func感到困惑。删除它,然后直接使用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)