在 python ggplot 中排序方面
Ordering the facet in python ggplot
我有一个数据框,df
其中 print df.head()
给出:
journey_time time_stamp day_name day_no week_no
240 289 2017-03-06 00:03:58 Monday 0 10
241 288 2017-03-06 00:08:58 Monday 1 10
242 291 2017-03-06 00:13:58 Monday 1 10
243 289 2017-03-06 00:18:59 Monday 1 10
244 295 2017-03-06 00:23:58 Monday 2 10
243 289 2017-03-06 00:18:59 Monday 2 10
244 295 2017-03-06 00:23:58 Monday 2 10
我基本上每天都有一系列 journey_time
值,范围 day_no
。
p = ggplot(aes(x='time_stamp',y='journey_time'),data=df) + scale_x_date(labels = date_format("%H:%M"), date_minor_breaks = "1 hour") + geom_line() + labs(x="Time", y="journey_time (seconds)") + facet_grid('day_name',scales='free_x')
这可以正常工作,因为我得到了 7 个水平图。但是,日期不按顺序排列(星期五、星期一、星期六等)。如何按 day_no
记录订购?
默认情况下,ggplot
似乎按字母顺序排列分类变量,但您可以使用 Pandas 中的 category
dtype 来指定您自己的顺序:
df.day_name = pd.Categorical(df.day_name,
ordered=True,
categories=["Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday",
"Sunday"])
这在我的测试环境中按预期工作(Python 3.4,Pandas 0.18.0,ggplot 0.11.5)。
我有一个数据框,df
其中 print df.head()
给出:
journey_time time_stamp day_name day_no week_no
240 289 2017-03-06 00:03:58 Monday 0 10
241 288 2017-03-06 00:08:58 Monday 1 10
242 291 2017-03-06 00:13:58 Monday 1 10
243 289 2017-03-06 00:18:59 Monday 1 10
244 295 2017-03-06 00:23:58 Monday 2 10
243 289 2017-03-06 00:18:59 Monday 2 10
244 295 2017-03-06 00:23:58 Monday 2 10
我基本上每天都有一系列 journey_time
值,范围 day_no
。
p = ggplot(aes(x='time_stamp',y='journey_time'),data=df) + scale_x_date(labels = date_format("%H:%M"), date_minor_breaks = "1 hour") + geom_line() + labs(x="Time", y="journey_time (seconds)") + facet_grid('day_name',scales='free_x')
这可以正常工作,因为我得到了 7 个水平图。但是,日期不按顺序排列(星期五、星期一、星期六等)。如何按 day_no
记录订购?
默认情况下,ggplot
似乎按字母顺序排列分类变量,但您可以使用 Pandas 中的 category
dtype 来指定您自己的顺序:
df.day_name = pd.Categorical(df.day_name,
ordered=True,
categories=["Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday",
"Sunday"])
这在我的测试环境中按预期工作(Python 3.4,Pandas 0.18.0,ggplot 0.11.5)。