簡體   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