Текст оси цвета по переменной
Я хотел бы изменить цвет текста оси тепловой карты в зависимости от другой переменной в наборе данных. Это то, что я пробовал до сих пор:
#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
Я получаю эту ошибку:
Ошибка в grid.Call(L_textBounds, as.graphicsAnnot(x $label), x $x, x $y,: недопустимое имя цвета "Регион"
И если я удалю цитаты вокруг "Region", я получаю эту ошибку:
Error in structure(list(family = family, face = face, colour = colour, :
object 'Region' not found
Как я могу это сделать?
Ответы
Ответ 1
Настройки, доступные через theme
, не могут быть сопоставлены с данными, например, с эстетикой. Вам нужно будет создать соответствующую палитру (чтение: список) цветов вручную.
Один из способов сделать это будет следующим:
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])))