繁体   English   中英

R柔性表中的斜体和颜色

[英]Italic and color in an R flextable

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

这个想法是将每种物种的拉丁名称用斜体表示,并根据该物种的某些特征为这些线条上色。 不幸的是,我不能同时做两个。

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

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)))

您是否有建议同时获取两者,即正确颜色的斜体文本?

是的,您可以使用以下代码获取所需的内容:

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代替。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM