2014-04-09 18 views
10

Tôi muốn thay đổi màu của văn bản trục bản đồ nhiệt của tôi tùy thuộc vào một biến khác trong tập dữ liệu. Đây là những gì tôi đã cố gắng cho đến nay:Văn bản trục màu theo biến

#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 

tôi nhận được lỗi này: Lỗi trong grid.Call (L_textBounds, as.graphicsAnnot (x $ nhãn), x $ x, x $ y,: tên màu không hợp lệ 'Region'

Và nếu tôi loại bỏ các dấu ngoặc kép quanh 'Region' tôi nhận được lỗi này:

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

làm thế nào tôi có thể làm điều này

+0

thú vị, nhưng tôi nghĩ rằng đây là một trục linh hoạt không xem xét bởi 'ggplot2' tác giả (s), vì vậy nó có thể khó làm. –

Trả lời

11

Cài đặt truy cập thông qua?không thể được ánh xạ tới dữ liệu như tính thẩm mỹ. Bạn sẽ cần phải xây dựng một bảng màu thích hợp (đọc: danh sách) của màu sắc bằng tay.

Một cách để làm như vậy sẽ là một cái gì đó như thế này:

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

Bất kỳ đề xuất nào về cách làm việc này khi thứ tự của nhãn không khớp với thứ tự của yếu tố (ví dụ: khi nhãn được sắp xếp lại trong ggplot hoặc khi sử dụng các khía cạnh). Có cách nào để trích xuất thứ tự các nhãn từ đối tượng ggplot không? –

Các vấn đề liên quan