R语言如何设置数据框列中m/z部分为斜体用于绘图
问题描述
现有如下结构的数据框:
number <- c(34,36,67,87,99) mz <- c("m/z 565.45","m/z 577.45","m/z 65.49","m/z 394.22","m/z 732.43") df <- data.frame(number, mz)
需求是将mz列中的“m/z”部分设置为斜体,满足后续绘图时图中m/z显示为斜体的效果,先后尝试两种写法均未成功:
- 第一种写法运行直接报错:
df$mz <- gsub('m/z', italic('m/z'), df$mz)
报错信息如下:
Error in italic("m/z") : could not find function "italic"
- 第二种写法未触发报错,但数据框中直接显示字面文本
italic('m/z'),没有实现斜体效果:
df$mz <- gsub('m/z', expression(italic('m/z')), df$mz)
解决方案
R普通数据框的文本列仅支持存储纯字符串,无法直接保存排版格式属性。italic()是R绘图系统plotmath提供的排版语法函数,不是可作用于普通字符串的通用函数,只有被绘图逻辑识别为表达式时才会渲染为斜体,因此不需要提前修改数据框中的原始文本,在绘图环节配置标签解析规则即可。
以常用的ggplot2绘图为例,实现方式如下:
- 保留原始数据框
mz列的内容不做修改 - 绘图时对标签做表达式转换,代码示例:
library(ggplot2) ggplot(df, aes(x = mz, y = number)) + geom_col() + scale_x_discrete( labels = ~parse(text = sub("m/z", "italic('m/z')", .x)) )
如果使用base R基础绘图系统,逻辑完全一致,在设置标签时做表达式解析即可:
barplot( height = df$number, names.arg = parse(text = sub("m/z", "italic('m/z')", df$mz)) )
说明:如果直接把
italic('m/z')作为字符串替换到数据列中,没有经过parse()转成合法表达式,绘图时只会把这段内容当成普通文本打印,不会触发斜体渲染效果。
内容的提问来源于stack exchange,提问作者Lieke
相关产品推荐
相关产品推荐

