【问题标题】:Prevent lines from appearing twice in the legend防止线条在图例中出现两次
【发布时间】:2014-04-12 00:43:45
【问题描述】:

大约一个小时前Align symbols in the legend,我问过一个关于这个传说的问题,但现在出现了一个新问题。我想在我的图例中添加线条。我尝试了以下内容:

plot(1:4)
legend("topleft",legend=expression(theta[1]==7%*%10^-4,theta[1]==0,
                                   theta[2]==-14%*%10^-4,theta[2]==0),
       lty=c(2,1),lwd=2,col=c("blue","grey"),bty="n",cex=1.2,ncol=2)

但是每行只能出现一次:第一行有一条蓝线,第二行有一条灰线。然后我尝试插入零,所以lty=c(2,1,0,0),但在thetas之间出现了空格。

应该是这样的:

有没有人建议我如何防止这些线条在我的图例中出现两次?

【问题讨论】:

  • 你在表达式中传递了四个对象,所以传说认为你想要四个不同的行。您希望表达式如何显示?
  • lty=c(2,1,0,0) 一样,但在thetas 之间没有空格。
  • 所以这些行只会在第一列出现一次...
  • 哦,那你可以把 c​​ol 改成col=c("blue", NA, "grey", NA)。还有lyt = c(2,2,1,1)
  • -1 你甚至没有尝试我在第一个问题中给你的解决方案

标签: r plot legend


【解决方案1】:

实际上这些行只出现了 4 次,因为您创建了一个 4 元素表达式向量。 (lines 参数正在被回收。)这个解决方案“保护”内部逗号不被解释,尽管再次查看它,我发现这个顺序不是你想要的。你应该能够解决我已经演示了如何更好地在表达式中包含逗号的问题:

plot(1:4)
legend("topleft",legend=expression(theta[1]==7%*%10^-4*","~theta[1]==0,
                                   theta[2]==-14%*%10^-4*","~theta[2]==0),
       lty=c(2,1),lwd=2,col=c("blue","grey"),bty="n",cex=1.2,ncol=2)

您可能需要调整位置,因为它会影响到第四个点,但话又说回来,这显然不是您的用例。考虑使用 ncol=1。

对编辑的回应:所以您不需要逗号,而只需要空格。添加更多波浪号:

png(); plot(1:4)
legend("topleft",legend=expression(theta[1]==7%*%10^-4~theta[2]==-14,
                                   theta[1]==0 ~~~~~~~~~~~~theta[2]==0),
 ncol=1, lty=c(2,1),lwd=2,col=c("blue","grey"),bty="n",cex=1.2);dev.off()

【讨论】:

  • 我添加了一个情节,它应该是什么样子,没有逗号,但距离很小。可以看出,我的第二个情节并不完美,因为第二列中的 thetas 彼此之间并不完全相同。
  • 不幸的是,它也不是一个完美的解决方案,因为 theta 没有很好地对齐。我正确地需要它,因为它是为了我的科学工作......
  • 你的“科学工作”?这意味着什么?从什么时候开始,注释的精确对齐代表了良好的科学? legend 函数没有制表符定位器。如果您需要以这样的精度定位第二个参数子表达式,则使用text 函数。如果您要求完美,请破解图例功能。
  • 我的硕士论文。注释的精确对齐并不代表好的科学,但作品中的情节应该看起来合适,而不是乱七八糟的符号。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-03
相关资源
最近更新 更多