R-通过多维数据重新订购GGPLOT2绘图



我在产生我认为应该是相当简单的ggplot2图时遇到了一些麻烦。

我在数据框架中有一些实验数据。每个数据输入均由正在测量的系统以及实例(问题)识别。每个条目还具有针对特定系统和实例的值。

例如:

mydata <- data.frame(System=c("a","b","a","b","a","b"), Instance=factor(c(1,1,2,2,3,3)), Value=c(10,5,4,2,7,8))

现在,我想在x轴包含实例标识符的框图中绘制这些数据,bar的颜色指示该值的哪个系统。条高度应由数据框中的值加权。

这几乎可以做我想要的:

qplot(data=mydata, weight=Value, Instance, fill=System, position="dodge")

我想做的最后一件事是重新排序条,以便按系统A的值进行排序。但是,我无法找到一种优雅的方法。

我的第一个本能是使用qplot(data=mydata, weight=Value, reorder(Instance, Value), fill=System, position="dodge"),但这将按每个实例的mean值排序,我只想使用A中的值A。我可以使用qplot(data=mydata, weight=Value, reorder(Instance, Value, function(x) { x[1] } ), fill=System, position="dodge")通过"第一个值"来订购实例这是危险的(如果订单更改了?),读者不清楚。

什么是更优雅的解决方案?

我敢肯定有一种比这更好的方法,但是使Instance成为ordered,即使数据更改也将继续工作:

qplot(data=mydata, weight=Value, 
 ordered(Instance,
 levels=mydata[System=='a','Instance'] [order(mydata[System=='a','Value'])])
,fill=System, position="dodge")

也许是写同一件事的一种更优雅的方式:

qplot(data=mydata, weight=Value, 
ordered(Instance,
levels=Instance [System=='a'] [order(Value [System=='a'])]) # Corrected
,fill=System, position="dodge")

最新更新