2017-03-20 5 views
0

こんにちは、特定のサブセットのラベルのみを表示しようとすると、美的なエラーが発生しています。例えば。私はこれを行うとR ggrepel:いくつかのラベルを隠す

library("ggplot2") 
library(gplots) 
library(ggrepel) 

set.seed(10) 
data <- data.frame(label=letters[1:21], number= runif(21, min=0, max=100)) 
data$label <-factor(data$label) 

ggplot(data, aes(x=label, y=number, fill=data$label)) + 
geom_bar(stat="identity") + 
geom_text_repel(data= data[data$number > 80,], aes(label =data$label), 
        arrow = arrow(length = unit(0.01, 'npc')), box.padding = unit(1.5, 'lines'),color="black" ) 

は、私はまだエラーが出るようなc("label1","label2") ベクターでラベルを交換する場合でも、次のエラーに

Error: Aesthetics must be either length 1 or the same as the data (2): label, x, y, fill 

を取得します。

私は何か間違っていますが、私はそれを理解できません。私はこれを行うことができる唯一の方法は、ラベルと同じ長さの別のベクトルを作成することですが、直接サブセットする方法があると思います。ありがとう!

+2

'$' insed 'aes'を使用しないでください。 – Axeman

答えて

3

変更コードには:

ggplot(data, aes(x=label, y=number, fill=data$label)) + 
geom_bar(stat="identity") + 
geom_text_repel(data= data[data$number > 80,], aes(label =label), ##<- Change here 
        arrow = arrow(length = unit(0.01, 'npc')), box.padding = unit(1.5, 'lines'),color="black" ) 

の問題は、あなたがlabelは2行以内で評価することにしたいのに対し、あなたは、data$label、21行のデータフレーム内の列を使用geom_text_repel()aesへの呼び出しでデータのサブセット。

このケースでは、データdataを呼び出すことで問題がわかりにくくなっています。より意味のあるものを見つけた場合は、エラーを特定する方が簡単です。

+0

大変ありがとうございます。まだ失敗しましたが、データ$ labelで塗りつぶしも間違っていたことに気づいたので、あなたのコメントの助けになります。ラベルを変更するとすぐに機能しました。 geom_bar(stat = "identity")+ geom_text_repel(data = data [データ$数値> 80、]、aes(データ、aes(x =ラベル、y =番号、塗りつぶしラベル)+ ) label = label)、## < - ここに変更 arrow = arrow(長さ=単位(0.01、 'npc'))、box.padding =単位(1.5、 'lines')、color = "black") ' 再度、感謝します;大いに感謝します。 – Ahdee

関連する問題