使用表达式(paste()将数学符号插入图例

14

我希望将以下内容替代为绿线条目的图例(cptsdtbehavioralm):
$P_{M1}(\tilde{z}>z) - P_{M0}(\tilde{z}>z)$
并将以下内容替代为蓝线条目的图例(fullbehavioralmodel):
$P_{M2}(\tilde{z}>z) - P_{M0}(\tilde{z}>z)$

这是我生成该图的代码(省略了一万个观察数据集和生成函数Fm0、Fm1和Fm2的转换):

bmp("bias_plot_v4.bmp", width=540, pointsize=10)
ggplot(data.frame(x=c(0,80)),aes(x) ) +
   stat_function(fun=function(x)((1-Fm1(x)) - (1- Fm0(x))), geom="line", 
aes(colour="cptsdtbehavioralm"), n=1000) +
   stat_function(fun=function(x)((1-Fm2(x)) - (1- Fm0(x))), geom="line", 
aes(colour="fullbehavioralmodel"), n=1000) +
 theme_bw() +
   ylab("Probability") +
 xlab(expression(paste("Security breaches per 3-week spear-phishing campaign ", 
italic( (z) )))) +  
 theme(aspect.ratio=.618) + 
   theme(legend.position=c(0.845,0.8)) +
   theme(legend.key = element_blank()) +
   scale_color_manual(values = c("cptsdtbehavioralm"="green2", 
"fullbehavioralmodel" = "blue"), name="Bias")
dev.off()

每当我尝试用一个数学表达式替换“cptsdtbehavioralm”和“fullbehavioralmodel”,例如保持简单,expression(P[{M1}])时,我会遇到以下类型的错误:

Error: unexpected '=' in:
"       theme(legend.key = element_blank()) +
   scale_color_manual(values = c(expression(P[{M1}]))="

我已经束手无策了——任何见解或建议都将不胜感激。


1
这个例子极其难以复现。请创建一个小的示例,并提供会返回错误的代码。目前看来,您可能输错了方程式(过早地关闭了一个括号),但这只是猜测... - mnel
1个回答

35

这是一个使用valueslabels的简单示例,可以帮助您实现所需的效果。

请注意,values将数据中的值映射到所需使用的颜色,而labels是您想要显示的标签(因此这是您需要放置表达式的地方)。

ggplot(data = data.frame(x= c(0,5)),aes(x=x)) +
    stat_function(fun=dnorm,aes(colour = 'red')) + 
    stat_function(fun = dexp, aes(colour = 'blue')) + 
    scale_colour_manual(values = c('red' = 'red','blue' = 'blue'),name = '', 
          labels = expression(P[M1](tilde(z)>0),P[M0](tilde(z)>0)))

1
非常感谢您 Mnel,您看穿了我的不够透明的问题。我从其他许多示例和帖子中拼凑了这段代码。多亏了您,我的代码不仅可以工作,而且更加整洁和清晰!我想为您点赞,但是我现在的经验还不够(这是我的第一篇帖子)。 - ikimiki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接