如何通过ggplot2中的facet_wrap命令来订购多个图表

3

我有一个数据集如下所示,并且我有大约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)

但我想根据我在另一个数据框中总结的这些产品的CV来订购图。我想知道是否有一种方法可以允许我指定我要按另一个数据框中的值的顺序排序面板图。

以下是一个小样本数据。基本上,想法是获得不同产品的价格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

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

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

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

如果没有看到一个最小可重现示例,我很难知道如何运行您的代码,重现您的问题,然后(希望)解决它。最小可重现示例意味着您的数据子集、从该数据样本创建cv数据框的代码以及创建绘图的代码(加上任何需要理解您的问题的说明文本)。 - eipi10
添加了一个小样例。希望这能说明我的观点。 - lll
我修复了一个错误(我原来的代码中最后一个逗号不应该在那里)。现在再试一下。(这是包含可重现示例在你的问题中的许多原因之一。如果我们无法测试我们的代码,我们无法确定它是否有效。) - eipi10
我尝试了新的代码行,但仍然只给了我一个混乱的大图而不是一组图表。您能告诉我原因吗? - lll
你的例子仍然无法重现。你提供了样本数据,但你仍需要提供从该样本数据到不符合你期望的图形的代码。然后我(或其他人)可以从中工作并尝试解决你的问题。 - eipi10
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接