سؤال

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