質問
私の同僚は、101のブルズアイチャートをプロットする必要があります。これは彼女の考えではありません。 Excelで彼女の奴隷を追い払うのではなく、神がこれらのことを作っていることを知っているのではなく、私はRでそれをすることを申し出ました。 ggplot2
では、バープロットを極座標にマッピングして簡単に確認できます。
しかし、問題が発生しています。データは既に集約されているため、Hadleyの例ここは私のために働いていません。これを行うためにカウントをファクターに拡張できますが、より良い方法があると感じています-geom_barにデータの読み取り方法を伝える方法があります。
データは次のようになります。
Zoo Animals Bears Polar Bears
1 Omaha 50 10 3
動物園ごとにプロットを作成しますが、その部分は管理できます。
そしてここにその dput
があります:
structure(list(Zoo = "Omaha", Animals = "50", Bears = "10", `Polar Bears` = "3"), .Names = c("Zoo",
"Animals", "Bears", "Polar Bears"), row.names = c(NA, -1L), class = "data.frame")
注:動物> =クマ> =ホッキョクグマが重要です。また、彼女は町を出ているので、彼女から生データを取得することはできません(とにかく大きなファイルがあったとしても)。
解決
分解することなくこれを行う方法は、 geom_bar
で stat =" identity"
を使用することです。
開始する文字列ではなく、数値を含むデータフレームを使用すると便利です。
dat <- data.frame(Zoo = "Omaha",
Animals = 50, Bears = 10, `Polar Bears` = 3)
データを適切に整理するには、 reshape2 :: melt
が必要です。
library(reshape2)
d3 <- melt(dat,id.var=1)
プロットを作成します(他の回答と同じです):
library(ggplot2)
ggplot(d3, aes(x = variable, y = value)) +
geom_bar(width = 1, colour = "black",stat="identity") +
coord_polar()
他のヒント
より良い答えを待っている間、私はあなたが言及した(次善の)ソリューションを投稿すべきだと考えました。 dat
は質問に含まれる構造です。
d <- data.frame(animal=factor(sapply(list(dat[2:length(dat)]),
function(x) rep(names(x),x))))
cxc <- ggplot(d, aes(x = animal)) + geom_bar(width = 1, colour = "black")
cxc + coord_polar()
inverse.rle
を使用してデータを再作成できます
dd = list(lengths = unlist(dat[-1]), values = names(dat)[-1])
class(dd) = "rle"
inverse.rle(dd)
複数の動物園(列)がある場合は、試すことができます
l = plyr::dlply(dat, "Zoo", function(z)
structure(list(lengths = unlist(z[-1]), values = names(z)[-1]), class = "rle"))
reshape2::melt(llply(l, inverse.rle))