2017-10-30 4 views
0

히트 맵을 작성하기 위해 dplyr 및 ggplot을 사용하고 있습니다. (필자는 과거에 유용한 -likert- 패키지를 사용했지만 더 많은 사용자 정의를 원했습니다.) 나머지 한 가지 작업은 히트 맵의 행을 한 열씩 다시 정렬하는 것입니다.히트 맵에서 행 정렬 (ggplot geom_tile)

아래의 단순화 된 예제에서 "A lot"열이 높은 곳에서 낮은 곳으로 내려갈 수 있도록 행을 배열하는 방법은 무엇입니까? 저기, 캠핑 열이 맨 위에 있고 수영이 밑에 있겠 어? 실생활에는 22 개의 행이 있으므로 수동으로 정렬하지 않으려합니다.

도움 주셔서 감사합니다. 열 유사

# not shown: use dplyr (gather, count, mutate) to create 
# the following simplified data.frame in long format: 

df <- tibble(
    value = c("A little","A little","A lot","A lot","Don't know","Don't know", "Not at all","Not at all"), 
    Item = rep(c("Swimming","Camping"), 4), 
    percent = c(10, 14, 50, 83, 20, .25, 10, 3) 
) 
df 

# manually set column order (non-alphabetical) 
col_order <- c("Not at all", "A little", "A lot", "Don't know") 
df$value <- factor(df$value, levels = col_order) 

# plot results 
p <- ggplot(df, aes(x = value, 
         y = Item)) + 
    geom_tile(aes(fill = percent)) + 
    geom_text(aes(label = paste0(round(percent, 0), sep = "%")), 
      size = 4, colour = "black") + 
    scale_fill_gradient(low = "#e5ebf0", 
         high = "#325f87", 
         limits = c(0, 100)) + 
    xlab("") + 
    ylab("") + 
    theme_tufte() # + additional customization 

print(p) 

enter image description here

답변

1

, 당신은 levels퍼센트에서와 많은에 대한 항목을 배열되는 경우, 플롯하기 전에 요인에 항목 열을 변환 할 수 있습니다 오름차순;

ggplot 라인 전에이 추가 :

a_lot = df[df$value == 'A lot',] 
df$Item = factor(df$Item, levels = a_lot$Item[order(a_lot$percent)]) 

이 제공 :

enter image description here

+1

당신을 감사합니다! 나는 "수준 ="측면에서 놀고 있었지만, 아직 거기에서 얻지 못했습니다. – Daniel