Более яблочко в R - PullRequest
       40

Более яблочко в R

6 голосов
/ 15 сентября 2009

Я использую 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() были сорваны, частично из-за полярных координат. Если мне нужно добавить цифры к названию, пусть будет так, но я всегда оставляю надежду на более элегантное решение. Заранее спасибо.

EDIT: Важное примечание для тех, кто придет после: яблочко - это гистограмма, отображенная на полярные координаты. Значение ggplot2 по умолчанию для столбчатых диаграмм - разумно их складывать. Однако это означает, что кольца вашего яблочка также будут сложены (например, радиус в моем примере равен сумме всех трех групп, 63, а не размеру самой большой группы, 50). Я не думаю, что это то, чего большинство людей ожидают от сюжета «яблочко», особенно когда группы вложены. Использование geom_bar(position = position_identity()) превратит сложенные кольца в многослойные круги.

РЕДАКТИРОВАТЬ 2: Пример из ggplot2 документы:
enter image description here

Ответы [ 2 ]

5 голосов
/ 15 сентября 2009

Вы также можете добавить его непосредственно к сюжету:

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
4 голосов
/ 15 сентября 2009

Вы можете добавить номера к легенде.

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=""))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...