pandas 为多 class 列绘制 CDF

pandas plot CDF for multi-class column

我正在使用 python empyrical-dist 程序包来绘制 CDF 关于旅行模式(多 class)的速度分布。

data.head()
+---+---------+----------+----------+-------+--------------+------------+
|   | trip_id | distance | duration | speed | acceleration | travelmode |
+---+---------+----------+----------+-------+--------------+------------+
| 0 |  303637 | 5.92     | 0.51     | 3.20  | 0.00173      | metro      |
| 1 |  303638 | 3.54     | 0.22     | 4.44  | 0.00557      | bus        |
| 2 |  303642 | 4.96     | 0.20     | 6.84  | 0.00944      | car        |
| 3 |  303662 | 6.53     | 0.97     | 1.86  | 0.00053      | foot       |
| 4 |  303663 | 40.23    | 0.94     | 11.85 | 0.00349      | car        |
+---+---------+----------+----------+-------+--------------+------------+

现在如何为 travelmode 中的每个模式绘制 speed 列的 CDF。所以,

from empiricaldist import Cdf

def decorate_cdf(title, x, y):
    """Labels the axes.

    title: string
    """
    plt.xlabel(x)
    plt.ylabel(y)
    plt.title(title)

for name, group in data.groupby('travelmode'):
    Cdf.from_seq(group.speed).plot()

title, x, y = 'Speed by mode','speed (km/h)', 'CDF'
decorate_cdf(title,x,y)

然后如何为每个绘图添加图例,以便我可以分辨哪个绘图适用于哪种模式?

使用matplotlib的pyplot.legend命令:

plt.legend(data.groupby('travelmode').groups.keys())

您可以简单地将参数 "label = " 添加到与 Cdf 关联的绘图方法中,如下所示:

Cdf.from_seq(group.speed).plot(label = 'metro') 

或者在你的案例中传递一个列表而不是 'metro'