Plotting grouped data in same plot using Pandas

前端 未结 4 1423
猫巷女王i
猫巷女王i 2020-11-28 08:57

In Pandas, I am doing:

bp = p_df.groupby(\'class\').plot(kind=\'kde\')

p_df is a dataframe object.

Howeve

4条回答
  •  北海茫月
    2020-11-28 09:50

    Version 1:

    You can create your axis, and then use the ax keyword of DataFrameGroupBy.plot to add everything to these axes:

    import matplotlib.pyplot as plt
    
    p_df = pd.DataFrame({"class": [1,1,2,2,1], "a": [2,3,2,3,2]})
    fig, ax = plt.subplots(figsize=(8,6))
    bp = p_df.groupby('class').plot(kind='kde', ax=ax)
    

    This is the result:

    plot

    Unfortunately, the labeling of the legend does not make too much sense here.

    Version 2:

    Another way would be to loop through the groups and plot the curves manually:

    classes = ["class 1"] * 5 + ["class 2"] * 5
    vals = [1,3,5,1,3] + [2,6,7,5,2]
    p_df = pd.DataFrame({"class": classes, "vals": vals})
    
    fig, ax = plt.subplots(figsize=(8,6))
    for label, df in p_df.groupby('class'):
        df.vals.plot(kind="kde", ax=ax, label=label)
    plt.legend()
    

    This way you can easily control the legend. This is the result:

    plot2

提交回复
热议问题