【问题标题】:Italic and color in an R flextableR 柔性表中的斜体和颜色
【发布时间】:2019-08-13 09:18:00
【问题描述】:

我有一个表格,其中包含根据年份(列)的物种(行)的存在(+)。

我们的想法是用斜体显示每个物种的拉丁名称,并根据物种的特定特征为线条着色。不幸的是,我不能同时做这两件事。

我设法得到的第一件事是为每一行设置正确的颜色:

library(dplyr)
library(flextable)

mydata <- data.frame(Espèce = c("Acipenser Sturio (L. 1758) Esturgeon européen",
"Alosa alosa  (L.1758) Alose vraie", "Alosa fallax (Lac. 1803) Alose feinte",
"Anguilla anguilla  (L. 1758) Anguille", "Lampetra fluviatilis  (L. 1758) Lamproie de rivière",
"Liza ramada (Risso 1826) Mulet porc") , 
`00` = c("",  "+", "+", "+", "",  "+"), 
`01` = c("",  "+", "+", "+", "+", "+"))


flextable(mydata) %>%
  color(color = c(rep("firebrick2",2),rep("black",3),rep("dodgerblue3",1)))


当我尝试添加斜体字体(左括号前的文本)时,斜体字失去了之前定义的颜色:

mydata %>%
  flextable(col_key=c("dummy_col",names(mydata)[-1])) %>%
  color(color=c(rep("firebrick2",2),rep("black",3),rep("dodgerblue3",1)), part="body")%>%
  display(col_key = "dummy_col", pattern = "{{id_}} ({{sciname_}}",
          formatters = list(id_ ~ unlist(strsplit(paste(mydata$Espèce[1:(length(mydata$Espèce))]), split="\\("))[seq(1,length(unlist(strsplit(paste(mydata$Espèce[1:(length(mydata$Espèce))]), split="\\("))),2)],
                            sciname_ ~ unlist(strsplit(paste(mydata$Espèce[1:(length(mydata$Espèce))]), split="\\("))[seq(2,length(unlist(strsplit(paste(mydata$Espèce[1:(length(mydata$Espèce))]), split="\\("))),2)]),
          fprops = list(id_ =fp_text(italic = TRUE))) %>%
  color(j="dummy_col", color=c(rep("firebrick2",2),rep("black",3),rep("dodgerblue3",1)))

您有什么建议可以同时获取两者,即正确颜色的斜体文本吗?

【问题讨论】:

    标签: r colors flextable italic


    【解决方案1】:

    是的,你可以使用下面的代码来得到你想要的:

    library(dplyr)
    library(tidyr)
    library(flextable)
    
    mydata <- data.frame(Espèce = c("Acipenser Sturio (L. 1758) Esturgeon européen",
                                    "Alosa alosa  (L.1758) Alose vraie", "Alosa fallax (Lac. 1803) Alose feinte",
                                    "Anguilla anguilla  (L. 1758) Anguille", "Lampetra fluviatilis  (L. 1758) Lamproie de rivière",
                                    "Liza ramada (Risso 1826) Mulet porc") , 
                         `X00` = c("",  "+", "+", "+", "",  "+"), 
                         `X01` = c("",  "+", "+", "+", "+", "+")) %>% 
      separate(`Espèce`, c("latin_name", "french_name"), sep = "\\(") %>% 
      mutate(french_name = paste0("(", french_name) )
    

    原来的列应该分成两列,这样更容易重复使用。

    > mydata
                  latin_name                   french_name X00 X01
    1      Acipenser Sturio   (L. 1758) Esturgeon européen        
    2          Alosa alosa            (L.1758) Alose vraie   +   +
    3          Alosa fallax       (Lac. 1803) Alose feinte   +   +
    4    Anguilla anguilla              (L. 1758) Anguille   +   +
    5 Lampetra fluviatilis   (L. 1758) Lamproie de rivière       +
    6           Liza ramada        (Risso 1826) Mulet porc   +   +
    

    然后通过使用函数composeas_paragraphas_i(斜体),你可以得到你想要的:

    flextable(mydata, col_keys = c("dummy", "X00", "X01")) %>%
      compose(j = "dummy", value = as_paragraph(as_i(latin_name), french_name)) %>% 
      color(color=c(rep("firebrick2",2),rep("black",3),rep("dodgerblue3",1)), part="body") %>% 
      autofit()
    
    

    请注意,函数 display 将被弃用,应替换为 compose

    【讨论】:

      猜你喜欢
      • 2018-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-05
      • 2021-07-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多