更改森林图中部分字符串的字体
Changing font of part of string in forestplot
下面是一个森林图,是用 R 中的 forestplot 包创建的。
enter image description here
我使用以下代码创建了它:
library("forestplot")
data(HRQoL)
clrs <- fpColors(box="royalblue",line="darkblue", summary="royalblue")
tabletext <- cbind(rownames(HRQoL$Sweden),
paste("r=", sprintf("%.2f", HRQoL$Sweden[,"coef"])))
forestplot(tabletext,
txt_gp = fpTxtGp(label = list(gpar(fontfamily = "Times", fontface="italic"),
gpar(fontfamily = "",
col = "blue")),
ticks = gpar(fontfamily = "", cex=1),
xlab = gpar(fontfamily = "HersheySerif", cex = 1.5)),
rbind(HRQoL$Sweden),
col=clrs,
xlab="EQ-5D index")
如您所见,我设法将整个第一列的字体更改为斜体。但我想做的是将第二列中的 r 更改为斜体,将数字保留为普通字体。这可能吗?
非常感谢。
我设法找到了解决方案。这并不容易,因为我需要将矩阵(不能有不同类型的变量)转换为多个列表和子列表。然后可以在新列表中的相应索引处存储 expression
。表达式可以保存不同的格式。不幸的是,他们不能评估变量,所以其他变量的索引必须通过 substitute
函数来完成。非常棘手,我不知道有没有更优雅的方法,但它有效。
另一个可能更简单的选择是使用 unicode(也包含在示例代码中),但我发现这很棘手。
希望代码对您有所帮助:
library("forestplot")
data(HRQoL)
clrs <- fpColors(box="royalblue",line="darkblue", summary="royalblue")
tabletext <- list(list(), list()) #Creating a list with "sublists" for each column
tabletext[[1]] <- rownames(HRQoL$Sweden)
tabletext[[2]][1] <- list(expression(paste(italic("r"), " = .42"))) #manual way using expression and paste
tabletext[[2]][2] <- list(substitute(expression(paste(italic("r"),"=",r_string)), list(r_string=HRQoL$Sweden[,2]))) #need substitute function to access variables
tabletext[[2]][3] <- list(substitute(expression(paste(italic("r"),"=",r_string)), list(r_string=sprintf("%.3f", HRQoL$Sweden[,3])))) #The substitute functions allows addicitonal manipulation of strings to be put back into the expression
tabletext[[2]][4] <- list(substitute(expression(paste(italic("t")[df],"=",r_string)), list(r_string=sprintf("%.3f", HRQoL$Sweden[,3]), df="23"))) #One can also substitute multiple elements of expression, use subscripts etc.
tabletext[[1]][2] <- "Use unicode: \u03B2" #Manipulate strings manually, using unicode
tabletext[[1]][4] <- list(expression(bold("Make single line bold"))) #Manipulate strings manually, using unicode
forestplot(tabletext,
txt_gp = fpTxtGp(label = list(gpar(fontfamily = "Times", fontface="italic"),
gpar(fontfamily = "",
col = "blue")),
ticks = gpar(fontfamily = "", cex=1),
xlab = gpar(fontfamily = "HersheySerif", cex = 1.5)),
rbind(HRQoL$Sweden),
col=clrs,
xlab="EQ-5D index")
我试图解释代码中的不同步骤。如果您想手动输入字符串,则不需要替换功能。重要提示:无论何时使用表达式,您都需要创建一个新列表。也许有一种使用 parse
函数的更优雅的方法,但这个方法有效。
So the plot with different formatting within a field looks like this:
下面是一个森林图,是用 R 中的 forestplot 包创建的。
enter image description here
我使用以下代码创建了它:
library("forestplot")
data(HRQoL)
clrs <- fpColors(box="royalblue",line="darkblue", summary="royalblue")
tabletext <- cbind(rownames(HRQoL$Sweden),
paste("r=", sprintf("%.2f", HRQoL$Sweden[,"coef"])))
forestplot(tabletext,
txt_gp = fpTxtGp(label = list(gpar(fontfamily = "Times", fontface="italic"),
gpar(fontfamily = "",
col = "blue")),
ticks = gpar(fontfamily = "", cex=1),
xlab = gpar(fontfamily = "HersheySerif", cex = 1.5)),
rbind(HRQoL$Sweden),
col=clrs,
xlab="EQ-5D index")
如您所见,我设法将整个第一列的字体更改为斜体。但我想做的是将第二列中的 r 更改为斜体,将数字保留为普通字体。这可能吗?
非常感谢。
我设法找到了解决方案。这并不容易,因为我需要将矩阵(不能有不同类型的变量)转换为多个列表和子列表。然后可以在新列表中的相应索引处存储 expression
。表达式可以保存不同的格式。不幸的是,他们不能评估变量,所以其他变量的索引必须通过 substitute
函数来完成。非常棘手,我不知道有没有更优雅的方法,但它有效。
另一个可能更简单的选择是使用 unicode(也包含在示例代码中),但我发现这很棘手。
希望代码对您有所帮助:
library("forestplot")
data(HRQoL)
clrs <- fpColors(box="royalblue",line="darkblue", summary="royalblue")
tabletext <- list(list(), list()) #Creating a list with "sublists" for each column
tabletext[[1]] <- rownames(HRQoL$Sweden)
tabletext[[2]][1] <- list(expression(paste(italic("r"), " = .42"))) #manual way using expression and paste
tabletext[[2]][2] <- list(substitute(expression(paste(italic("r"),"=",r_string)), list(r_string=HRQoL$Sweden[,2]))) #need substitute function to access variables
tabletext[[2]][3] <- list(substitute(expression(paste(italic("r"),"=",r_string)), list(r_string=sprintf("%.3f", HRQoL$Sweden[,3])))) #The substitute functions allows addicitonal manipulation of strings to be put back into the expression
tabletext[[2]][4] <- list(substitute(expression(paste(italic("t")[df],"=",r_string)), list(r_string=sprintf("%.3f", HRQoL$Sweden[,3]), df="23"))) #One can also substitute multiple elements of expression, use subscripts etc.
tabletext[[1]][2] <- "Use unicode: \u03B2" #Manipulate strings manually, using unicode
tabletext[[1]][4] <- list(expression(bold("Make single line bold"))) #Manipulate strings manually, using unicode
forestplot(tabletext,
txt_gp = fpTxtGp(label = list(gpar(fontfamily = "Times", fontface="italic"),
gpar(fontfamily = "",
col = "blue")),
ticks = gpar(fontfamily = "", cex=1),
xlab = gpar(fontfamily = "HersheySerif", cex = 1.5)),
rbind(HRQoL$Sweden),
col=clrs,
xlab="EQ-5D index")
我试图解释代码中的不同步骤。如果您想手动输入字符串,则不需要替换功能。重要提示:无论何时使用表达式,您都需要创建一个新列表。也许有一种使用 parse
函数的更优雅的方法,但这个方法有效。
So the plot with different formatting within a field looks like this: