0

我在制作我认为应该是一个相当简单的 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 轴包含实例标识符,条形图的颜色表示该值适用于哪个系统。条形高度应按数据框中的值加权。

这几乎可以满足我的要求:

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 中的值。我可以用qplot(data=mydata, weight=Value, reorder(Instance, Value, function(x) { x[1] } ), fill=System, position="dodge")“第一个值”对实例进行排序,但这很危险(如果顺序改变了?)并且读者不清楚。

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

4

1 回答 1

3

我确信有比这更好的方法,但是制作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")
于 2012-10-29T18:24:05.610 回答