1

わかりました、これは私を困惑させました。私はこの機能を持っています:

tf <- function(formula = NULL, data = NULL) {
res <- as.character(formula[[2]])
fac2 <- as.character(formula[[3]][3])
fac1 <- as.character(formula[[3]][2])

# Aesthetic & Data 1
p <- ggplot(aes_string(x = fac1, y = res, color = fac1), data = data) +
    facet_grid(paste(".~", fac2)) + geom_point() # OK if we only go this far

facCounts <- count(data, vars = c(fac2, fac1))
facCounts$label <- paste("n = ", facCounts$freq , sep = "")
facCounts$y <- min(data$res) - 0.1*diff(range(data$res))
facCounts <- facCounts[,-3]
names(facCounts) <- c("f2", "f1", "lab", "y") # data frame looks correct

# Aesthetic & Data 2
p <- p + geom_text(aes(x = f1, y = y, label = lab),
        color = "black", size = 4.0, data = facCounts) + facet_grid(".~f2")
p
}

このデータで実行して呼び出すと、次のようになります。

set.seed(1234)
mydf <- data.frame(
    resp = rnorm(40),
    cat1 = sample(LETTERS[1:3], 40, replace = TRUE),
    cat2 = sample(letters[1:2], 40, replace = TRUE))

p <- tf(formula = resp~cat1*cat2, data = mydf); print(p)

この画像を生成します:

ここに画像の説明を入力

注意深く見ると、2 つのファセットのデータが実際には同じであることがわかります。カウントは、表示されるべきである (そして に保存されている)そのデータに対して正しいですfacCounts。への呼び出しgeom_textがコメントアウトされている場合、プロットは正しいです。呼び出しにさまざまな変更を加えると、geom_text上記のようになるか、正しいデータが存在するがカウント テキストが重複するかのいずれかになります。この迷宮から抜け出せない!の試みも+ annotate("text", ...)うまくいきません。データのファセットを維持し、正しいカウントを維持するには、どのような変更が必要ですか? ありがとう。これは ggplot 0.9.3 btw です。

4

1 に答える 1

2

これがうまくいくと確信したので:

tf <- function(formula = NULL, data = NULL) {
  res <- as.character(formula[[2]])
  fac2 <- as.character(formula[[3]][3])
  fac1 <- as.character(formula[[3]][2])

  # Aesthetic & Data 1
  p <- ggplot(aes_string(x = fac1, y = res, color = fac1), data = data) +
    facet_grid(paste(".~", fac2)) + geom_point() # OK if we only go this far

  facCounts <- count(data, vars = c(fac2, fac1))
  facCounts$label <- paste("n = ", facCounts$freq , sep = "")
  facCounts$y <- min(data$res) - 0.1*diff(range(data$res))
  facCounts <- facCounts[,-3]
  names(facCounts) <- c("cat2", "f1", "lab", "y") # data frame looks correct

  # Aesthetic & Data 2
  p <- p + geom_text(aes(x = f1, y = y, label = lab),
                     color = "black", size = 4.0, data = facCounts)
  p
}

facet_grid別の名前のファセット変数を使用して 2 回目の呼び出しを行っていました。2 番目の呼び出しを削除し、名前f2を `cat2 に変更するとうまくいくようです。

于 2013-01-26T02:05:06.613 に答える