2014-04-09 24 views
10

Veri kümesindeki başka bir değişkene bağlı olarak, heatmap eksen metnimin rengini değiştirmek istiyorum. Renk ekseni metnine göre değişken

#load data, scale numeric columns, add state abbreviation and region 
state_data <- data.frame(state.x77) 
state_data <- state_data[,1:8] 
state_data <- rescaler(state_data, type='range') 
state_data$State <- state.abb 
state_data$Region <- state.region 

#make heatmap 
melted_state <- melt(state_data,id.vars=c('State', 'Region')) 

p <- ggplot(melted_state, 
     aes(x=State, y=variable)) 
p <- p + geom_tile(aes(fill = value), colour = "white") 
p <- p + theme(axis.text.x=element_text(colour="Region")) ## doesn't work! 
p 

bu hatayı alıyorum: Bu şimdiye kadar denedim budur grid.Call (L_textBounds içinde hatası, as.graphicsAnnot (x $ etiket), x $ x x $ y: geçersiz renk adı 'Bölge'

Ve 'Bölgesinde' sonuna tırnak işareti kaldırırsanız bu hatayı alıyorum: bunu nasıl

Error in structure(list(family = family, face = face, colour = colour, : 
    object 'Region' not found 

+0

ilginç, ama bu 'ggplot2' yazar (lar) tarafından kabul edilmez bir esneklik ekseni olduğunu düşünüyorum, bu yüzden zor olabilir yap. –

cevap

11

Ayarlarüzerinden erişilebilir? Ne yazık ki,, estetik gibi verilerle eşlenemez. Renklerin manuel olarak uygun bir paletini (okuma listesi) oluşturmanız gerekecektir. Bunu yapmak için

bir yolu böyle bir şey olurdu:

numColors <- length(levels(melted_state$Region)) # How many colors you need 
getColors <- brewer_pal('qual') # Create a function that takes a number and returns a qualitative palette of that length (from the scales package) 
myPalette <- getColors(numColors) 
names(myPalette) <- levels(state_data$Region) # Give every color an appropriate name 
p <- p + theme(axis.text.x = element_text(colour=myPalette[state_data$Region]))) 
+2

Etiketlerin sırasının faktör sırasına uymadığında bunun nasıl yapılacağıyla ilgili öneriler (örneğin etiketler ggplot olarak veya faset kullanırken yeniden düzenlendiğinde). Etiketlerin sırasını ggplot nesnesinden çıkarmanın bir yolu var mı? –