2011-12-06 31 views
13

ggplot2'yi kullanarak bir ısı haritası oluşturmaya çalışıyorum. Aslında verilerimle çoğaltmaya çalıştığım this example'u buldum, ancak zorlanıyorum. Benim veri şöyle basit bir .csv dosyasıdır:ggplot2 ile bir ısı haritası nasıl oluşturulur?

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

Ben meyve adı x ekseninde ve kişi y ekseninde olduğu basit bir ısı haritasını üretmek istiyoruz . Grafik, her bir karenin renginin tüketilen meyve sayısının bir temsili olduğu kareleri tasvir etmelidir. mike:peach'a karşılık gelen kare en koyu olmalıdır. İşte

Ben ısı haritası üretmek için denemek için kullanıyorum kodudur:

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

ben y ekseni üzerinde x-ekseni ve insanlar üzerindeki meyve numarası almak bu verileri çizmek zaman. Ayrıca meyve sayısını temsil eden renk gradyanları da almıyorum. Meyvelerin isimlerini ısı haritası olarak gösterilen bir kişinin yediği meyve sayısıyla x ekseninde nasıl alabilirim? Ben R alıyorum akım çıkışı şuna benzer:

enter image description here

cevap

30

dürüst @ dr.bunsen olmak - Yukarıdaki örnekte kötü tekrarlanabilir olduğunu ve öğretici ilk bölümünü okumadım size linked. Burada aradığınızı muhtemelen:

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 Ben orijinal Söz konusu veriler ile yukarıdaki kod çalıştırmasına çalıştı, ama başarısız oldu: Rescale (değer) içinde Hata: Kullanımı : Rescale (x, newrange) Burada x sayısal bir nesnedir ve yeni satır yeni min ve maks. Sorun ne? – Ali

+1

@AliSharifi Evet, haklısınız - ggplot2'de ve 'recale' işlevini kaldıran diğer paketlerde ya da başka bir işleve kaydırıldığında bazı değişiklikler yapılmalıdır. İhtiyacınız olan şey, sayısal ölçeklendirmeyi minimum ve maksimum belirlemiş olan "ölçekler" paketinden "yeniden boyutlandırma" kullanmaktır. Kodu tamamen tekrarlanabilir şekilde güncelledim. –

+0

@GeekOnAcid mükemmel! – Ali

İlgili konular