سؤال

أنا أستخدم 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 المستندات:
enter image description here

هل كانت مفيدة؟

المحلول

يمكنك إضافة الأرقام إلى وسيلة الإيضاح.

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

نصائح أخرى

يمكنك أيضًا إضافته مباشرة إلى قطعة الأرض:

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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top