1

白い線がバーの前でバーを分割するチャートを作成しています (申し訳ありませんが、画像を投稿できません)。一度それを行うコードを取得しましたが、ループはまだ得意ではありません。

library(ggplot2)

count <- c(61.8,18.8)
name <- c("A","B")
yes <- data.frame(count,name)

j <-   ggplot(yes, aes(x=name, y=count)) + 
geom_bar(stat="identity", position="dodge") 

1行だけ追加するために、この関数を作成しました...

b <- function (yx){
j + annotate("segment", x=-Inf, xend=Inf, y=yx, yend=yx,size=1, colour="white") 
}

b(8)

これは私が立ち往生している場所です。次のようなベクトルを実行できるループを作成したいと思います...

yx <- c(8,10,20)

8、10、20 に線を作成します。1 つのトリッキーな点は、ターミナル 1 (最後) 以外のすべてのデータの末尾に「+」を付ける必要があることです。誰もこれを試しましたか?

ありがとう

4

1 に答える 1

4

関数は既にベクトル化されているため、何も変更する必要はありません。

add_lines <- function(yx){
  annotate("segment", x=-Inf, xend=Inf, y=yx, yend=yx,size=1, colour="white") 
}

j + add_lines(c(8,10,20))

ただし、概念的には、行を 1 行ずつ追加する場合は、単純にリストを使用できます。

add_oneline <- function(yx){
  annotate("segment", x=-Inf, xend=Inf, y=yx, yend=yx,size=1, colour="white") 
}

lines <- lapply(c(8,10,20), add_oneline)
j + lines

しかし、それは最初のオプションよりも効率が悪く、複雑です。

于 2013-08-06T20:37:15.720 に答える