2011-12-06 21 views
13

मैं ggplot2 का उपयोग कर एक ताप मानचित्र बनाने की कोशिश कर रहा हूं। मुझे this example मिला, जो मैं अनिवार्य रूप से अपने डेटा के साथ दोहराने की कोशिश कर रहा हूं, लेकिन मुझे कठिनाई हो रही है। मेरे डेटा एक सरल .csv फ़ाइल इस तरह दिखता है:ggplot2 के साथ एक हीटमैप कैसे उत्पन्न करें?

people,apple,orange,peach 
mike,1,0,6 
sue,0,0,1 
bill,3,3,1 
ted,1,1,0 

मैं एक साधारण गर्मी नक्शा निर्माण करने के लिए जहां फल के नाम x- अक्ष पर है और व्यक्ति y- अक्ष पर है चाहते हैं । ग्राफ को वर्गों को चित्रित करना चाहिए जहां प्रत्येक वर्ग का रंग उपभोग किए गए फल की संख्या का प्रतिनिधित्व करता है। mike:peach से संबंधित वर्ग सबसे अंधेरा होना चाहिए।

यहाँ कोड मैं हीटमैप का उत्पादन करने के लिए प्रयास करने के लिए उपयोग कर रहा हूँ है:

data <- read.csv("/Users/bunsen/Desktop/fruit.txt", head=TRUE, sep=",") 
fruit <- c(apple,orange,peach) 
people <- data[,1] 
(p <- ggplot(data, aes(fruit, people)) + geom_tile(aes(fill = rescale), colour = "white") + scale_fill_gradient(low = "white", high = "steelblue")) 

मैं इस डेटा मैं x- अक्ष और y- अक्ष पर लोगों पर फल की संख्या प्राप्त जब साजिश। मुझे फल की संख्या का प्रतिनिधित्व करने वाले रंगीन ग्रेडियेंट भी नहीं मिलते हैं। एक्स-अक्ष पर फलों के नाम मुझे गर्मी के रूप में प्रदर्शित व्यक्ति द्वारा खाए गए फल की संख्या के साथ कैसे प्राप्त कर सकते हैं? वर्तमान आउटपुट मैं आर में हो रही इस तरह दिखता है:

enter image description here

उत्तर

30

ईमानदार @ dr.bunsen होना करने के लिए - ऊपर अपने उदाहरण खराब reproducable था और आप ट्यूटोरियल के पहले भाग को पढ़ नहीं था कि आप linked। यहाँ शायद आप के लिए क्या देख रहे है:

library(reshape) 
library(ggplot2) 
library(scales) 

data <- structure(list(people = structure(c(2L, 3L, 1L, 4L), 
              .Label = c("bill", "mike", "sue", "ted"), 
              class = "factor"), 
         apple = c(1L, 0L, 3L, 1L), 
         orange = c(0L, 0L, 3L, 1L), 
         peach = c(6L, 1L, 1L, 0L)), 
        .Names = c("people", "apple", "orange", "peach"), 
        class = "data.frame", 
        row.names = c(NA, -4L)) 
data.m <- melt(data) 
data.m <- ddply(data.m, .(variable), transform, rescale = rescale(value)) 
p <- ggplot(data.m, aes(variable, people)) + 
     geom_tile(aes(fill = rescale), colour = "white") 
p + scale_fill_gradient(low = "white", high = "steelblue") 

enter image description here

+0

@GeekOnAcid मैं मूल प्रश्न में डेटा के साथ उपरोक्त कोड को चलाने के लिए कोशिश की, लेकिन इसके साथ विफल हुआ: rescale (मूल्य) में त्रुटि: उपयोग : rescale (x, newrange) जहां x एक संख्यात्मक वस्तु है और newrange नया न्यूनतम और अधिकतम है। समस्या क्या है? – Ali

+1

@AliSharifi हां, आप सही हैं - 'ggplot2' में कुछ बदलाव हुए हैं और अन्य संकुल जो 'रिकेल' फ़ंक्शन को हटा चुके हैं या इसे दूसरे फ़ंक्शन में स्थानांतरित कर चुके हैं। आपको जो चाहिए वह पैकेज 'स्केल' से 'rescale' का उपयोग करना है जो संख्यात्मक वेक्टर को न्यूनतम और अधिकतम निर्दिष्ट करने के लिए पुनर्विक्रय करता है। मैंने कोड को पूरी तरह से पुन: उत्पन्न करने के लिए अद्यतन किया। –

+0

@GeekOnAcid सही! – Ali

संबंधित मुद्दे