使用调色板功能时使 NA 透明

2024-01-09

这是我的数据框:

Test = structure(list(Corr_p = c(0.65, 0.64, 0.64, NA, 0.79, 0.77), 
                      Case_p = c(24.57, 12.89, 20.92, NA, 11.1, 12.2), 
                      Control_p = c(16.4, 9.38, 16.21, NA, 7, 6.17), 
                      Delta_p = c(49.82, 37.42, 29.06, NA, 58.57, 97.73)), 
                 row.names = 18:23, class = "data.frame")

我定义了一个调色板,一个用于 Delta_p 列,一个用于 Corr_p

library(gt)
pal <- function(x) {
  f_neg <- scales::col_numeric(
    palette = c(emerald),
    domain = c(min(test, na.rm = TRUE), 0)
  )
  f_pos1 <- scales::col_numeric(
    palette = c(oryel),
    domain = c(0, 300)
  )
  f_pos2 <- scales::col_numeric(
    palette = c(sunshort),
    domain = c(300, 500)
  )
  f_pos3 <- scales::col_numeric(
    palette = c(toplevel),
    domain = c(500, max(test, na.rm = TRUE))
  )
  
  dplyr::case_when(
    x < 0 ~ f_neg(x),
    x < 300 ~ f_pos1(x),
    x < 500 ~ f_pos2(x),
    .default = f_pos3(x)
  )
}

library(scales)
corr_palette_pos <- col_numeric(c("#FEF0D9", "#990000"), domain = c(min_cor_pos, max_cor_pos), alpha = 0.75)

然后我绘制表格。正如您所看到的,它使用 NA 值的默认颜色。

Test %>%
  gt() %>% 
  data_color(columns = c(Delta_p), colors = pal) %>%
  data_color(columns = c(Corr_p), colors = corr_palette_pos) 

但我希望它是透明的或白色的,就像背景一样。我发现了很多例子:R gt 表使 NA 值不出现 https://stackoverflow.com/questions/73599951/r-gt-table-make-na-values-not-appear

data_color(
    columns = colnames(df)[grep("res", colnames(df))],
    colors = scales::col_numeric(
      palette = pal,
      domain = c(0, 20),
      na.color = "transparent"
    )
  ) %>%

但是当我像这样使用它时:

Test %>%
  gt() %>% 
  data_color(columns = c(Delta_p), colors = scales::col_numeric(palette = pal,
                                                                domain = c(29.06,97.73), 
                                                                na.color = "transparent")) %>%
  data_color(columns = c(Corr_p), colors = corr_palette_pos) 

所有值均采用相同颜色:

请问有什么想法,如何解决这个问题吗?我的想法是我必须在 pal 函数中以某种方式定义它?!

UPDATE

PS:真的没有人可以帮忙吗?

为gt表中的data_color设置不对称中点 https://stackoverflow.com/questions/64469714/set-asymmetric-midpoint-for-data-color-in-gt-table在本主题中,有关于如何更改 if-else-语句中的 NA-Color 的评论。我尝试在 case-when-Statement 中实现它,但没有成功。我认为这是改变它的正确位置,但我只是不知道如何改变。

ifelse(x < 0 | is.na(x), f_neg(x), f_pos(x))

你有两个调色板,pal and corr_palette_pos。在这两种情况下,您都需要指定如何处理NAs.

  • In pal, add is.na(x) ~ "transparent" to the case_when.
  • In corr_palette_pos, 指定na.color = "transparent"。请注意,您可以使用domain = NULL从数据中推断出域。
library(gt)
library(scales)

emerald = c("#d3f2a3","#97e196","#6cc08b","#4c9b82","#217a79","#105965","#074050")
oryel = c("#ecda9a","#efc47e","#f3ad6a","#f7945d","#f97b57","#f66356","#ee4d5a")
sunshort = c("#dc3977","#b9257a","#7c1d6f")
toplevel = c("#6c2167", "#541f3f")

Test = structure(list(Corr_p = c(0.65, 0.64, 0.64, NA, 0.79, 0.77), 
                      Case_p = c(24.57, 12.89, 20.92, NA, 11.1, 12.2), 
                      Control_p = c(16.4, 9.38, 16.21, NA, 7, 6.17), 
                      Delta_p = c(49.82, 37.42, 29.06, NA, 58.57, 97.73)), 
                 row.names = 18:23, class = "data.frame")

pal <- function(x) {
  f_neg <- col_numeric(
    palette = emerald,
    domain = c(min(Test, na.rm = TRUE), 0)
  )
  f_pos1 <- col_numeric(
    palette = oryel,
    domain = c(0, 300)
  )
  f_pos2 <- col_numeric(
    palette = sunshort,
    domain = c(300, 500)
  )
  f_pos3 <- col_numeric(
    palette = toplevel,
    domain = c(500, max(Test, na.rm = TRUE))
  )
  
  dplyr::case_when(
    x < 0 ~ f_neg(x),
    x < 300 ~ f_pos1(x),
    x < 500 ~ f_pos2(x),
    is.na(x) ~ "transparent",
    .default = f_pos3(x)
  )
}

corr_palette_pos <- col_numeric(
  c("#FEF0D9", "#990000"),
  domain = NULL,
  alpha = 0.75,
  na.color = "transparent"
)

Test %>%
  gt() %>% 
  data_color(columns = Delta_p, colors = pal) %>%
  data_color(columns = Corr_p, colors = corr_palette_pos) 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用调色板功能时使 NA 透明 的相关文章

  • 如何根据值扩展数据框? [复制]

    这个问题在这里已经有答案了 我有以下输入数据框 df lt data frame x c a b c y c 4 5 6 from c 1 2 3 to c 2 4 6 df x y from to 1 a 4 1 2 2 b 5 2 4
  • 如何测试字符串中的前三个字符是r中的字母还是数字?

    下面给出了我拥有的数据集的示例 请注意 总数据集中我有超过两列 ID X 1 MJF34 2 GA249D 3 DEW235R 4 4SDFR3 5 DAS3 我想测试 X 中的前三个字符是否是字母 如果是 那么我想替换该值以仅显示前三个字
  • 拆分并保存在新的 data.frames 中

    我有一个大 data frame 144 列 我想将其分成每组 3 列 子文件或子 data frame 然后将子 data frame 保存在单独的文件中 换句话说 file1 将包含从 1 到 3 的列 file2 将包含从 6 到 9
  • 直接来自数据的马尔可夫模型图(makovchain 或 deemod 包?)

    我想读取一堆因子数据并从中创建一个可以很好地可视化的转换矩阵 我发现了一个非常好的软件包 称为 heemod 它与 diagram 一起工作得不错 对于我的第一个快速而肮脏的方法 我运行了一段 Python 代码来获取矩阵 然后使用这个 R
  • R + ggplot2 - 无法分配大小为 128.0 Mb 的向量

    我有一个 4 5MB 9 223 136 行 的文件 其中包含以下信息 0 0 0 0147938 3 67598e 07 0 0226194 7 35196e 07 0 0283794 1 10279e 06 0 033576 1 470
  • dplyr::mutate 添加多个值

    网上有几个与此相关的问题dplyr Github 存储库 https github com hadley dplyr已经 并且至少有一个相关的问题 但没有一个问题完全涵盖了我的问题 我认为 在 dplyr mutate 调用中添加多列 ht
  • 如何在双对数图(ggplot2)中添加趋势线?

    我需要绘制一个遵循幂律分布的数据向量 所以如果我将它们绘制在对数轴上 它们将是一条直线 但是 如果我没有明确提供 y 参数 我不知道如何绘制 这是代码 library poweRlaw library ggplot2 xmin 1 alph
  • 通过单击堆叠条形图打开选项卡

    我正在使用 R 构建一个包含转发的堆积条形图 ggplot and plotly 如果单击条形图的一部分 我希望打开一个新的浏览器选项卡并显示该特定日期的推文以及指定的转发量 但是 当我单击下面示例中的其中一个栏时 会打开一个不同的链接 表
  • 基于多列重新编码数据框列[重复]

    这个问题在这里已经有答案了 如何根据其他列的值重新编码列 假设我有以下数据框 我想重新编码df Col3使得该值为 0 如果df Col1 x and df Col2 a gt df lt data frame a c rep x 3 re
  • 在前两个冒号上分割字符串

    我想在前两个冒号上拆分一列字符串 但不在任何后续冒号上拆分 my data lt read table text my string some data 123 34 56 78 100 87 65 43 21 200 a4 b6 c888
  • R 比较所有列对的每个值[重复]

    这个问题在这里已经有答案了 我有一个 18x18 的数据框 我想将所有可能的列对相互比较 以便对于每对两列 18 行中的值相互比较 由于我的数据太大 无法放在这里 我写了一个小例子来说明到目前为止我所想到的 gt a lt c 1 18 g
  • 使管道工 API 可通过互联网使用

    我对 R 中的管道工包相当陌生 我有一个可以在我的计算机上本地运行的工作 API 我可以使用以下代码从网络上的实时 JS 应用程序访问它 r lt plumb my api code r r run host 0 0 0 0 port 80
  • 将数据框中的 1 列拆分为 2 列 [重复]

    这个问题在这里已经有答案了 这是我的数据框 gt data Manufacturers 1 Audi RS5 2 BMW M3 3 Cadillac CTS V 4 Lexus ISF 所以我想将制造商和型号分开 就像这样 gt data
  • R data.table:在当前测量之前对出现次数进行计数

    我有一组在几天内进行的测量结果 测量次数通常为 4 任何测量中可以捕获的数字范围为 1 5 在现实生活中 给定测试集 范围可能高达 100 或低至 20 我想每天计算每个值在当天之前发生的次数 让我用一些示例数据来解释 test data
  • 将日期刻度添加到 R 中的 ggplot

    我试图在此图中的 x 轴上添加刻度以显示一年中的所有月份 我的代码如下 library ggplot2 library scales p lt ggplot df test aes time reading p geom point alp
  • 寻找一种有效的方法来计算两个表中间隔集之间的重叠数量?

    注意 为了方便起见 我使用上一篇文章中的示例数据集 假设有两个数据集 ref and map 他们是 ref lt data table space rep nI 3 t1 c 100 300 500 t2 c 150 400 600 id
  • ggplot多个时间不等的时间序列

    我知道有一些与时间序列和多个数据帧相关的已回答问题 但我似乎无法弄清楚这一点 我想绘制 4 个不同压力传感器与时间的时间戳数据 pa 列 我有来自同一实验的 4 个带时间戳的压力读数 dfs 然而 由于传感器故障和数据中的其他信号 传感器收
  • Dplyr select_ 和starts_with 对变量列表中的多个值进行选择

    我正在从不同位置的不同传感器收集数据 数据输出类似于 df lt data frame date c 2011 2012 2013 2014 2015 Sensor1 Temp c 15 18 15 14 19 Sensor1 Pressu
  • 包含多行 LaTeX 方程的 R 帮助页面

    我正在编写 R 包文档roxygen2 我想将以下多行方程插入到帮助页面中 但我的 LaTeX 代码没有被渲染 hello2 description deqn F t begin cases alpha t f L t 1 alpha t
  • 如何创建具有特定于每个方面的标题和副标题的分面图?

    生成一个图 该图与每列的单独图相结合 带有标题和副标题 以及每个图的垂直线 我使用直方图创建了带有垂直线的列 library ggplot2 library gridExtra library tidyr actualIris lt dat

随机推荐