私が達成したいのは、すでにここで尋ねられたものとまったく同じです(特に、ggplot
やlattice
のようなパッケージではなく、Rの基本グラフィックを使用します): barplot()のバーの順序付け
しかし、そこで提案された解決策は私にはうまくいかないようです。私がする必要があるのは以下です。私はこれを持っていると仮定します:
num <- c(1, 8, 4, 3, 6, 7, 5, 2, 11, 3)
cat <- c(letters[1:length(num)])
data <- data.frame(num, cat)
barplot(data$num)
を使用して棒グラフを生成すると、次のようになります。
ここで、data$cat
に従ってバーを並べ替えます。上記のリンクに従って、受け入れられた答えを試しましたが、エラーが発生しました:
num2 <- factor(num, labels = as.character(cat))
Error in factor(num, labels = as.character(cat)) : invalid 'labels'; length 10 should be 1 or 9
次に、他の答えも試しました:
num <- as.factor(num)
barplot(table(num))
しかし、ここに私が得たものがあります:
そのため、この質問とは少し異なるこの特定のケースでは、バープロットをどのように注文すれば、バーはdata$num
で定義されますが、data$cat
?
私は次のようになります、
num <- c(1, 8, 4, 3, 6, 7, 5, 2, 11, 3)
cat <- c(letters[1:10])
data <- data.frame(num, cat)
barplot(data[order(data[,1],decreasing=TRUE),][,1],names.arg=data[order(data[,1],decreasing=TRUE),][,2])
上記のコードは、order()関数を2回使用しています(以下のコメントを参照)。これを回避するために、順序付けられたdata.frameの結果を新しいdata.frameに保存し、これを使用してバープロットを生成できます。
num <- c(1, 8, 4, 3, 6, 7, 5, 2, 11, 3)
cat <- c(letters[1:10])
data <- data.frame(num, cat)
data2 <- data[order(data[,1],decreasing=TRUE),]
barplot(data2[,1],names.arg=data2[,2])
これを行うにはggplotを使用できます
library("ggplot2")
num <- c(1, 8, 4, 3, 6, 7, 5, 2, 11, 3)
cat <- c(letters[1:10])
data <- data.frame(num, cat)
ggplot(data,aes(x= reorder(cat,-num),num))+geom_bar(stat ="identity")
基本関数を使用する
df <- data[order(data$num,decreasing = TRUE),]
barplot(df$num,names.arg = df$cat)
また、データを新しいデータフレームに入れたくない場合は、次を使用することもできます。少し簡単です。
barplot(sort(data$num, decreasing = TRUE))