如何通过ggplot2中的facet_wrap订购多个图

时间:2015-06-14 23:48:52

标签: r ggplot2

我有一个类似下面的数据集,我有大约100万行,如下所示:

orderid     prodid      priceperitem    date        category_eng    
3010419     2   62420       18.90   2014-10-09      roll toliet paper   

我目前正在绘制这些产品散点图的图,使用priceperitem作为y轴,date作为x轴。我还根据这些产品订购了这些产品。它们的价格随时间变化的系数。我已将这些结果汇总到另一个数据集中,如下所示:

prodid       mean        count           sd           cv
424657       12.7124    5541.0000       10.239       80.54999886
158726193    23.7751    1231.0000       17.7567      74.68621596

我使用以下代码同时获取许多产品的散点图:

ggplot(Roll50.last, aes(x=date, y=priceperitem)) + geom_point() + facet_wrap(~prodid)

但我想根据这些产品订购这些产品'我在另一个data.frame中汇总的简历。我想知道是否有一种方法可以让我指定我想按照另一个数据帧中的值的顺序对面板图进行排序。

以下是一个小样本数据。基本上,这个想法是为了获得不同的产品。价格cv = s.d./mean。我想按照cv从最高到最低的顺序绘制这些产品的散点图。

#generate reproducible example
id = c(1: 3)
date = seq(as.Date("2011-3-1"), as.Date("2011-6-8"), by="days")

id = rep(c(1,2,3,4),each=25)
set.seed(01)
id = sample(id)

price = rep(c(1:20), each = 5)
price = sample(price)
data = data.frame(date, id, price)

1 个答案:

答案 0 :(得分:0)

您可以将prodid转换为因子,并将因子类别的顺序设置为基于变异系数的大小。例如,让我们假设您的数据框带有cv值,称为cv。然后,按prodid

的值排序cv
Roll50.last$prodid = factor(Roll50.last$prodid, 
                            levels = cv$prodid[order(cv$cv, decreasing=TRUE)])

现在,当您绘制数据时,prodid构面将按cv的大小减小排序。