2014-04-09 14 views
10

Chciałbym zmienić kolor tekstu osi termicznej w zależności od innej zmiennej w zbiorze danych. To, co starałem dotąd:Tekst osi kolorów według zmiennej

#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 

otrzymuję ten błąd: Błąd w grid.Call (L_textBounds, as.graphicsAnnot (x $ label), x $ x, x $ y,: Nieprawidłowa nazwa koloru „region”

A jeśli mogę usunąć cudzysłowy wokół „region” otrzymuję ten błąd:

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

Jak mogę to zrobić

+0

ciekawy, ale myślę, że jest to oś elastyczności nie uznane przez 'autora (ów) ggplot2', więc może być ciężko zrobić. –

Odpowiedz

11

Ustawienia dostępnego poprzez?nie można niestety przypisać do danych takich jak estetyka. Będziesz musiał ręcznie skonstruować odpowiednią paletę (czytaj: listę) kolorów.

Jednym ze sposobów, aby to zrobić byłoby coś takiego:

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

Wszelkie sugestie, jak to zrobić, gdy kolejność etykiet nie jest zgodna z kolejnością czynnika (na przykład, gdy etykiety są zamieniane w ggplot lub podczas używania faset). Czy istnieje sposób na wyodrębnienie kolejności etykiet z obiektu ggplot? –

Powiązane problemy