如何在ggplot图例的R表达式中缩小frac的分子、分母与分数线间距
缩小R表达式中frac的分子分母与分数线间距的解决方案
我太懂你这种看着图例里分数间距大到扎眼的感觉了!其实问题出在R默认的数学公式渲染模式上,咱们用几个简单的小调整就能搞定:
方法1:用\textstyle切换成行内公式样式
默认情况下,R的expression()里的数学公式会用「块级公式(displaystyle)」渲染,这种样式会给分数预留较大的空白。换成「行内公式(textstyle)」后,分子、分母和分数线的间距会立刻紧凑起来。
修改后的完整代码:
library(tibble) library(ggplot2) tibble( t = seq(0,60,.1), osc = cos(log2(1+t)*pi+pi/4) ) %>% ggplot(aes(t, osc))+ geom_line(aes(color = 'red'))+ scale_color_manual( values = 'red', labels = expression(cos(log[2](t+1)*pi+textstyle frac(pi,4))+10) )+ theme( legend.position = 'bottom' )
只需要在frac()前面加上\textstyle(注意R里反斜杠要转义,所以写成\\textstyle也可以,两种写法都生效),就能让分数的空白显著缩小。
方法2:用\scriptstyle进一步压缩(适合极端紧凑需求)
如果觉得textstyle的效果还不够,还可以用\scriptstyle——这是下标级别的公式样式,会让分数更小、间距更窄:
scale_color_manual( values = 'red', labels = expression(cos(log[2](t+1)*pi+scriptstyle frac(pi,4))+10) )
额外选项:用latex2exp包直接写LaTeX语法
如果你更熟悉LaTeX的公式控制逻辑,可以安装latex2exp包,用标准LaTeX语法精细化调整分数:
install.packages("latex2exp") library(latex2exp) tibble( t = seq(0,60,.1), osc = cos(log2(1+t)*pi+pi/4) ) %>% ggplot(aes(t, osc))+ geom_line(aes(color = 'red'))+ scale_color_manual( values = 'red', labels = TeX("$\\cos(\\log_2(t+1)\\pi+\\textstyle\\frac{\\pi}{4})+10$") )+ theme( legend.position = 'bottom' )
这种方式灵活性更高,适合复杂公式的细节调整。
内容的提问来源于stack exchange,提问作者Baraliuh
相关产品推荐
相关产品推荐

