3

私の同僚は、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")

注: 動物 >= クマ >= ホッキョクグマであることが重要です。また、彼女は外出しているので、彼女から生データを取得することはできません (とにかく大きなファイルがあったとしても)。

4

3 に答える 3

3

より良い回答を待っている間、あなたが言及した (次善の) 解決策を投稿する必要があると考えました。 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() 
于 2009-09-11T16:05:19.120 に答える
2

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))
于 2012-12-24T22:42:14.380 に答える
1

分解せずにこれを行う方法は、で使用することstat="identity"ですgeom_bar

開始する文字列ではなく数値を含むデータフレームを用意すると便利です。

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()
于 2012-12-24T22:30:06.877 に答える