6

私はggplot2を使用して、Rでいくつかのブルズアイチャートを作成しています。それらは見栄えがよく、チャートにブルズアイレイヤーの値をプロットしたいことを除いて、誰もが非常に満足しています。プロットの右下隅、またはプロットの余白に配置するだけでよかったのですが、これを行うのに少し苦労しています。

データの例をもう一度示します。

critters <- structure(list(Zoo = "Omaha", Animals = 50, Bears = 10, PolarBears = 3), .Names = c("Zoo", 
"Animals", "Bears", "PolarBears"), row.names = c(NA, -1L), class = "data.frame")

そしてそれをプロットする方法:

d <- data.frame(animal=factor(c(rep("Animals", critters$Animals),
       rep("Bears", critters$Bears), rep("PolarBears", critters$PolarBears)),
       levels = c("PolarBears", "Bears", "Animals"), ordered= TRUE))
grr <- ggplot(d, aes(x = factor(1), fill = factor(animal))) +  geom_bar() +
  coord_polar() + labs(x = NULL, fill = NULL) +
  scale_fill_manual(values = c("firebrick2", "yellow2", "green3")) +
  opts(title = paste("Animals, Bears and Polar Bears:\nOmaha Zoo", sep=""))

たとえば、このプロットの右下隅に、次のようなリストを追加したいと思います。

Animals: 50
Bears: 10
PolarBears: 3

しかし、私はその方法を理解できません。これまでの私の努力annotate()は、極座標によって部分的に妨げられてきました。タイトルに数字を追加する必要がある場合は、そうですが、よりエレガントな解決策を常に望んでいます。

編集:後に来る人のための重要な注意:ブルズアイは極座標にマッピングされた棒グラフです。バープロットのggplot2のデフォルトは、賢明なことに、それらをスタックすることです。ただし、これはブルズアイのリングも積み重ねられることを意味します(たとえば、私の例の半径は、最大のグループのサイズ50ではなく、3つのグループすべての合計63に等しくなります)。特にグループがネストされている場合、ほとんどの人がブルズアイプロットに期待することではないと思います。を使用geom_bar(position = position_identity())すると、積み重ねられたリングが層状の円に変わります。

編集2:ggplot2ドキュメントからの例:
ここに画像の説明を入力してください

4

2 に答える 2

5

プロットに直接追加することもできます。

grr <- ggplot(d, aes(x = factor(1), fill = factor(animal))) +  geom_bar() +
coord_polar() + labs(x = NULL, fill = NULL) +
scale_fill_manual(values = c("firebrick2", "yellow2", "green3")) +
opts(title = paste("Animals, Bears and Polar Bears:\nOmaha Zoo", sep=""))+
geom_text(y=c(3,10,50)-3,label=c("3","10","50"),size=4)
grr
于 2009-09-14T23:00:49.540 に答える
4

凡例に数字を追加できます。

library(ggplot2)
critters <- structure(list(Zoo = "Omaha", Animals = 50, Bears = 10, PolarBears = 3), .Names = c("Zoo", "Animals", "Bears", "PolarBears"), row.names = c(NA, -1L), class = "data.frame")
d <- data.frame(animal=factor(c(rep("Animals", critters$Animals),
       rep("Bears", critters$Bears), rep("PolarBears", critters$PolarBears)),
       levels = c("PolarBears", "Bears", "Animals"), ordered= TRUE))
levels(d$animal) <- apply(data.frame(table(d$animal)), 1, paste, collapse = ": ")
ggplot(d, aes(x = factor(1), fill = factor(animal))) +  geom_bar() +
  coord_polar() + labs(x = NULL, fill = NULL) +
  scale_fill_manual(values = c("firebrick2", "yellow2", "green3")) +
  opts(title = paste("Animals, Bears and Polar Bears:\nOmaha Zoo", sep=""))
于 2009-09-14T22:47:28.967 に答える