使用希腊(即LaTeX)符号替换图例标签/文本

4

我试图创建一个包含两条具有不同形状和颜色的线条的绘图。

我查阅了许多类似的在线问题,但一直没有成功。到目前为止,我已经能够完成以下操作:

library(reshape2)
library(ggplot2)
library(latex2exp)
v1 <-c(0.000120,-0.000085,-0.000018,0.000005)
v2 <- c(0.000164,0.000041,-0.000032,0.000031)
v3 <- c(500,1000,5000,10000)
dfr <- data.frame(rate1=v1,rate2=v2,quantity=v3)
dfr <- melt(dfr,id='quantity',value.name="res")
ggplot(dfr, aes(x=quantity, y=res,group=variable,shape=variable)) +
  geom_line(size=1, aes(linetype=variable,colour=variable)) + 
  geom_point( size=4,aes(colour=variable))+ coord_cartesian(ylim = c(-0.0001,0.0002)) + 
  scale_x_continuous(breaks=c(500,1000,5000,10000))+
  scale_linetype_manual(values=c("solid", "longdash"))+
  geom_hline(yintercept = 0,linetype="dotted",size=1)

第一个图

然而,我想要做到以下几点:

  1. 用两个希腊字母lambda替换图例文本/标签:rate1rate2
  2. 最后,隐藏图例标题variable

当我尝试包含这个代码:scale_colour_manual( values=c('#F8766D','#00BFC4'),labels = unname(TeX(c(" $\\lambda_1$", "$\\lambda_2$")))),以改变图例文本时,我得到了额外的图例如下:

带有额外图例的第二个图

请问我该如何解决这个问题?谢谢!

1个回答

2
问题在于更改scale_linetype中的标签,但没有更改其他比例尺(colorshape)的标签,因此ggplot2将不再将它们合并到一个图例中。因此,您必须同时更改其他比例尺的标签。但是,使用Tex()我无法使其起作用。但是,遵循此帖子,使用bquote可以正常工作。最后,要摆脱图例标题,只需使用labs()将所有三个比例尺的标题设置为NULL即可。
library(reshape2)
library(ggplot2)
library(latex2exp)
v1 <-c(0.000120,-0.000085,-0.000018,0.000005)
v2 <- c(0.000164,0.000041,-0.000032,0.000031)
v3 <- c(500,1000,5000,10000)
dfr <- data.frame(rate1=v1,rate2=v2,quantity=v3)
dfr <- melt(dfr,id='quantity',value.name="res")

labels <- c(bquote(lambda[1]), bquote(lambda[2]))

ggplot(dfr, aes(x=quantity, y=res,group=variable,shape=variable)) +
  geom_line(size=1, aes(linetype=variable,colour=variable)) + 
  geom_point( size=4,aes(colour=variable))+ coord_cartesian(ylim = c(-0.0001,0.0002)) + 
  scale_x_continuous(breaks=c(500,1000,5000,10000))+
  scale_linetype_manual(values=c("solid", "longdash"), labels = labels)+
  scale_shape_discrete(labels = labels)+
  scale_colour_discrete(labels = labels) +
  labs(color = NULL, linetype = NULL, shape = NULL) +
  geom_hline(yintercept = 0,linetype="dotted",size=1)


2
我想的也是一样的,但你更快。你可以将你的 labels 改为 labels <- unname(TeX(c(" $\\lambda_1$", "$\\lambda_2$"))),这样它就能像 OP 建议的那样使用任何 LaTex 代码了,只需通过 latex2exp - mischva11
@stefan 非常感谢,问题已解决!我从你的解释中学到了很多新东西。 - dms
1
@mischva11 感谢您的贡献。labels <- unname(TeX(c(" $\\lambda_1$", "$\\lambda_2$"))) 也可以正常工作。 - dms

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