You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ggplot2方程中同时使用Times New Roman字体和斜体格式?

问题描述

需要让ggplot生成的图表中所有文本采用Times New Roman字体,同时将stat_poly_eq生成的R²、P值中的变量(R、P)设置为斜体格式。但设置字体后,斜体样式被自动覆盖,尝试手动拼接italic表达式、使用expression()函数等方法均未生效,且未在ggpmisc或stat_poly_eq的文档中找到相关字体样式说明。使用的包包括ggplot2、ggpmisc和showtext。

解决方案

核心问题在于showtext配合parse=TRUE解析数学表达式时,若仅加载常规字体,无法识别斜体样式。需同时加载Times New Roman的斜体变体,并手动构建包含斜体标记的表达式字符串。

关键步骤

  • 同时加载Times New Roman的常规字体和斜体字体,确保italic()能调用对应样式
  • 手动构建表达式字符串,用italic(R)和italic(P)包裹需要斜体的变量,配合parse=TRUE解析
  • 通过theme的base_family统一设置所有文本的字体族,无需在stat_poly_eq中单独指定

修改后的完整代码

library(ggplot2)
library(ggpmisc)
library(showtext)

# 加载Times New Roman常规及斜体字体
font_add(family = "Times New Roman", 
         regular = "C:/Windows/Fonts/times.ttf",
         italic = "C:/Windows/Fonts/timesi.ttf")
showtext_auto()

# 数据集
df <- structure(list(
  MaxRot = c(2520, 1800, 1800, 1260),
  Height = c(44.1, 61.7, 57.1, 26.5)
), class = "data.frame", row.names = c(NA, 4))

# 绘制图表
ggplot(df, aes(x = MaxRot, y = Height)) +   
  geom_point(size = 3) + # 添加散点便于观察趋势
  stat_poly_eq(
    formula = y ~ x,
    aes(label = paste("italic(R)^2 == ", signif(..rr.., 2), sep = "")),
    parse = TRUE,
    size = 6
  ) +
  stat_poly_eq(
    formula = y ~ x,
    aes(label = paste("italic(P) == ", signif(..p.value.., 3), sep = "")),
    parse = TRUE,
    size = 6,
    vjust = 3
  ) +
  scale_x_continuous(
    name = "Maximum rotation (°)",
    limits = c(0, 2600),
    breaks = seq(0, 2600, by = 200),
    expand = c(0, 0)
  ) +
  scale_y_continuous(
    name = "Length (mm)",
    limits = c(0, 70),
    breaks = seq(0, 70, by = 10),
    expand = c(0, 0)
  ) +
  theme_minimal(base_family = "Times New Roman")

说明

  • signif()函数用于控制数值精度,可根据需求调整小数位数
  • 若系统中Times New Roman的字体路径不同,需修改font_add中的文件路径
  • 手动构建表达式替代..rr.label..和..p.value.label..,能更精准控制斜体范围与字体样式

内容的提问来源于stack exchange,提问作者Mariah Howell

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 00:48:09