更改 geom_tile() 热图上的中断

问题描述

我正在处理以下数据框:

structure(c(NA,52,22,111,3,16,5,80,NA,14,243,41,1,177,20,26,8,13,21,10,59,29,7,15,9,273,1733,60,164,171,53,932,135,33,144,2,23,81,146,19,11,4,12,32,40,NA),.Dim = c(11L,11L),.Dimnames = list(c("WILL_","WOULD_","MAY_","MIGHT_","CAN_","Could_","SHALL_","SHOULD_","MUST_","OUGHT TO_","USED TO_"),c("_WILL","_WOULD","_MAY","_MIGHT","_CAN","_Could","_SHALL","_SHOULD","_MUST","_OUGHT TO","_USED TO")))

我有以下情节:

reshape2::melt(twitter_us_no_clit_matrix_nohave,value.name = "Freq") %>%
  mutate(label = ifelse(is.na(Freq) | Freq == 0,"",as.character(Freq))) %>%
  ggplot(aes(Var2,fct_rev(Var1))) +
  geom_tile(aes(fill = Freq),color = "black") +
  geom_text(aes(label = label),color = "black") +
  scale_fill_gradient(low = "grey",high = "purple",na.value = "black") +
  scale_x_discrete(NULL,expand = c(0,0),position="top") +
  scale_y_discrete(NULL,0)) +
  theme(axis.text.x = element_text(angle=60,vjust = 0.5,hjust = 0)) 

一切看起来都不错,但我想弄清楚如何更改中断,以便相应地更改热图及其“频率”标签

中断将是 c(0,50,100,500,100000) 并且会使值在色热方面看起来或多或少类似于以下内容

我应该在 geom_tile() 中调整哪些确切的线条?

解决方法

如果我理解正确,您想将连续音阶划分为多个步骤。我 had some success 使用 scale_fill_steps() 函数:

library(tidyverse)

twitter_us_no_clit_matrix_nohave <- structure(c(NA,52,22,111,3,16,5,80,NA,14,243,41,1,177,20,26,8,13,21,10,59,29,7,15,9,273,1733,60,164,171,53,932,135,33,144,2,23,81,146,19,11,4,12,32,40,NA),.Dim = c(11L,11L),.Dimnames = list(c("WILL_","WOULD_","MAY_","MIGHT_","CAN_","COULD_","SHALL_","SHOULD_","MUST_","OUGHT TO_","USED TO_"),c("_WILL","_WOULD","_MAY","_MIGHT","_CAN","_COULD","_SHALL","_SHOULD","_MUST","_OUGHT TO","_USED TO")))

breaks <- c(0,50,100,500,100000)

reshape2::melt(twitter_us_no_clit_matrix_nohave,value.name = "Freq") %>%
  mutate(label = ifelse(is.na(Freq) | Freq == 0,"",as.character(Freq))) %>%
  ggplot(aes(Var2,fct_rev(Var1))) +
  geom_tile(aes(fill = Freq),color = "black") +
  geom_text(aes(label = label),color = "black") +
  scale_fill_steps(low = "grey",high = "purple",breaks = breaks,na.value = "black") + 
  scale_x_discrete(NULL,expand = c(0,0),position="top") +
  scale_y_discrete(NULL,0)) +
  theme(axis.text.x = element_text(angle=60,vjust = 0.5,hjust = 0)) 

但是,考虑到休息之间的距离不同,大部分比例是灰色的。我不知道你是否想保留这种观点。

要重新缩放颜色,请将线条更改为

scale_fill_steps(low = "grey",na.value = "grey",trans = "log")

这将使它们在您的体重秤中evenly distributed。我手动设置它们没有成功。我更改了 NA 值的颜色,因为由于对数转换,现在所有的零都是 NA