2016-05-04 3 views
0

私は10個のボックスプロットを含むプロットを作成しようとしており、それぞれがデータセットの10分の1を表しています。しかし、デシルのいくつかは同一であり、ggplotはそうでない限りグラフをプロットしません。同様の質問で私が見た回答では、ユニークでないデシルを削除したり、データを追加してユニークにすることを提案しています。しかし、私の場合、いくつかはユニークではないことを示すことが重要です。ユニークではないデシルのボックスプロット

は、これは(フォーマットなし)私のコードです:十分位数は一意であるデータセットに、次のようになり、

mydata$metric_deciles <- with(mydata, cut(metric, breaks=quantile(metric, probs=seq(0,1, by=0.1), na.rm=TRUE), include.lowest=TRUE, dig.lab = 10)) 
p1 <- ggplot(na.omit(mydata), aes(factor(metric), metric2)) 
p1 <- p1 + geom_boxplot() 
p1 <- p1 + scale_x_discrete(NULL, labels = c("10%", "20%", "30%", "40%", "50%", "60%", "70%", "80%", "90%", "100%")) 

最初の行でenter image description here

、I error in cut.default: 'breaks' are not uniqueを取得してください。

いくつかの固有のものがなくても(例:ボックスプロットの一部が同じである場合でも)10個の十六進数すべてをプロットする方法を探しています。

+0

FYI、ラベルを作成するために、あなただけの 'paste0(配列(10,100,10)、 "%")を行うことができます' – eipi10

+0

これは 'ggplot2'問題ではありません。エラーは 'cut'関数で発生しています。 – eipi10

答えて

0

少なくとも1つの値がmetricであるため、エラーが発生しています。これは繰り返され、分位点のブレークポイントの1つにまたがります。これが原因で、cutにエラーが発生しています。デシルを作成する変数でランク付けしてデシルを作成することもできます。ここで組み込みirisデータフレームを有する例を示します。

# Create decile labels based on Petal.Width. 
# First, rank by Petal.Width, then divide by the number of values we want in each decile. 
# Then, multiply by 10 and paste on "%" to get the label names. 
iris$decile = paste0((rank(iris$Petal.Width, ties.method="random") %/% (nrow(iris)/9.99) + 1)*10, "%") 

# Put the labels in the correct order 
iris$decile = factor(iris$decile, levels=paste0(seq(10,100,10),"%")) 

なお、上記のコードで同じPetal.Widthといくつかの行を使用する場合、重複するレベルの問題を引き起こすものである、異なる十分位数で終わりますレベルがquantileによって選択されたcut。上記のコードはrankを使用し、ランダムにタイを分割します。

# Plot boxplots of Sepal.Width by decile of Petal.Width 
ggplot(iris, aes(decile, Sepal.Width)) + 
    geom_boxplot() 
+0

これはありがとうございます - 私はそれがそこの方法のほとんどであると思います。しかし、デシルのいくつかは同一であるため(第7〜第10デシールはすべて100%データ$メトリック値です)、第7パーセンタイルの100%データをすべてグループ化し、そのボックスプロットを複製することが最善の策だと思います8th-10th。現時点では、データ$ metric2の値を分割して存在しないため、誤った表示になります。ボックスのプロットには存在しない傾向が表示されます。 – James

関連する問題