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

これよりも良い方法があると確信していますがInstanceordered機能し、データが変更されても機能し続けます。

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 に答える