سؤال
وزميل لي يحتاج لرسم الخرائط 101 عين الثور. وهذه ليست فكرة لها. بدلا من أن يكون عبدا لها بعيدا في Excel أو الله يعلم ما جعل هذه الأشياء، وأنا قدمت للقيام بها في R. رسم مخطط بار إلى الإحداثيات القطبية لجعل عين الثور هو نسيم في ggplot2
.
وأنا على التوالي في مشكلة، ولكن: يتم تجميع البيانات بالفعل، لذلك سبيل المثال هادلي هنا لا يعمل بالنسبة لي. أنا يمكن أن يتوسع التهم للخروج الى عامل للقيام بذلك، لكنني أشعر أن هناك طريقة أفضل - بعض الطرق لقول 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")
ملحوظة: من المهم أن الحيوانات => الدببة> = الدببة القطبية. أيضا، انها خارج المدينة، لذلك لا أستطيع أن مجرد الحصول على البيانات الخام منها (إذا كان هناك أي وقت مضى ملف كبير، على أي حال).
المحلول
وطريقة للقيام بذلك دون تفصيل لاستخدام 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()
نصائح أخرى
وبينما نحن في انتظار الجواب الأفضل، وأنا أحسب أنني يجب أن نشر (الأمثل) الحل الذي ذكرته. 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()
ويمكنك استخدام 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))