0

我正在处理以下数据框:

structure(c(NA, 52, 22, 52, 111, 0, 3, 16, 5, 0, 0, 80, NA, 14, 
243, 14, 41, 1, 177, 3, 0, 20, 26, 8, NA, 13, 21, 10, 0, 0, 0, 
0, 0, 59, 29, 7, NA, 15, 20, 0, 8, 8, 0, 0, 111, 9, 273, 1733, 
NA, 60, 3, 14, 164, 0, 8, 20, 171, 53, 932, 135, NA, 0, 33, 3, 
0, 144, 21, 0, 3, 1, 2, 0, NA, 1, 0, 0, 0, 23, 81, 14, 146, 20, 
19, 5, NA, 1, 1, 0, 11, 4, 4, 8, 11, 0, 2, 12, NA, 0, 0, 1, 0, 
4, 32, 0, 16, 0, 3, 0, NA, 0, 0, 40, 2, 1, 0, 0, 0, 1, 5, 0, 
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, expand = c(0, 0)) +
  theme(axis.text.x = element_text(angle=60,vjust = 0.5, hjust = 0)) 

一切看起来都不错,但我正试图弄清楚如何更改休息时间,以便相应地更改热图及其“频率”标签。

就色热而言,中断将使 c(0,1,5,10,50,100,500,100000)值看起来或多或少类似于以下内容:

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

4

1 回答 1

1

如果我理解正确,你想把你的连续规模分成几个步骤。我使用该功能取得了一些成功:scale_fill_steps()

library(tidyverse)

twitter_us_no_clit_matrix_nohave <- structure(c(NA, 52, 22, 52, 111, 0, 3, 16, 5, 0, 0, 80, NA, 14, 
            243, 14, 41, 1, 177, 3, 0, 20, 26, 8, NA, 13, 21, 10, 0, 0, 0, 
            0, 0, 59, 29, 7, NA, 15, 20, 0, 8, 8, 0, 0, 111, 9, 273, 1733, 
            NA, 60, 3, 14, 164, 0, 8, 20, 171, 53, 932, 135, NA, 0, 33, 3, 
            0, 144, 21, 0, 3, 1, 2, 0, NA, 1, 0, 0, 0, 23, 81, 14, 146, 20, 
            19, 5, NA, 1, 1, 0, 11, 4, 4, 8, 11, 0, 2, 12, NA, 0, 0, 1, 0, 
            4, 32, 0, 16, 0, 3, 0, NA, 0, 0, 40, 2, 1, 0, 0, 0, 1, 5, 0, 
            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,1,5,10,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, expand = c(0, 0)) +
  theme(axis.text.x = element_text(angle=60,vjust = 0.5, hjust = 0)) 

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

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

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

这将使它们均匀分布在您的规模中。我无法手动设置它们。我更改了值的颜色,因为由于对数转换NA,现在您的所有零都是s。NA

于 2021-01-21T14:38:52.397 回答