R中的更多靶心图

Posted

技术标签:

【中文标题】R中的更多靶心图【英文标题】:More bullseye plotting in R 【发布时间】:2010-11-28 07:02:52 【问题描述】:

我正在使用 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 默认值是明智地堆叠它们。然而,这意味着你的靶心环也将被堆叠(例如,在我的示例中,半径等于所有三个组的总和,63,而不是最大组的大小,50)。我认为这是大多数人对靶心图的期望,尤其是当组嵌套时。使用geom_bar(position = position_identity()) 会将堆叠的环变成分层的圆圈。

编辑 2:来自ggplot2 文档的示例:

【问题讨论】:

问你的问题不必抱歉。好问题,我从答案中学到了东西。 大部分只是为策划靶心而道歉,尤其是在系列中。条形图更容易比较(至少对我而言)。 【参考方案1】:

您也可以直接将其添加到情节中:

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

【讨论】:

【参考方案2】:

您可以将数字添加到图例中。

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=""))

【讨论】:

以上是关于R中的更多靶心图的主要内容,如果未能解决你的问题,请参考以下文章

在R中的多个点之间的图中添加多个线段

Vis.js 节点上的动画靶心

如何在R中的能量图中绘制曲线?

在 R 中的折线图中添加误差线(ggplot)

从 R 中的切割树状图中提取标签成员资格/分类(即:树状图的 cutree 函数)

如何将平均线添加到R中的分组密度图中?