如何将一个带有下标的特定图例标签稍微向下移动?

问题描述 投票:2回答:2

我已经在带有expression()的图例标签中生成了一个下标,该下标将整个标签稍微向上移动并看上去很烂(中间是红色的)。

plot(1:10, type="l")
curve(x^2, col=2, add=TRUE)
curve(x^3, col=3, add=TRUE)
legend("bottomright", lty=1, col=3:1,
       legend=c(expression(z>2),
                expression(z==italic(z[1])), 
                expression(z==0)))

enter image description here

this great solution的帮助下,我将特定标签的y位置乘以legend文本的正确空格,然后将x值移位我费力切丁的值。

a <- legend("bottomright", lty=1, col=3:1, trace=T, 
            legend=rep("         ", 3))
a$text$y[2] <-  a$text$y[2]/1.043
text(a$text$x-.3, a$text$y, c(expression(z>2),
                              expression(z==italic(z[1])), 
                              expression(z==0)), pos=4)

但是,找出正确的值可能是一种业余爱好,并且在将绘图发送到设备(例如pdf)时可能并不可靠,因为plot的输出例如是pdf的大小是动态的(考虑各种layoutpdf大小)。

原因确实是expression(),因为

mean(a$text$y[-2]) == a$text$y[2]
# [1] TRUE

我没有找到诸如legend.txt.y=c(1, 1.043, 1)之类的选项,xy似乎只接受标量。问题仍然存在,下标的标签偏移了多少。

可能有我忽略的选项,或者有任何解决方法可以将expression()稍微向下移动一个因素或其他原因?]]

我已经在带有expression()的图例标签中生成了一个下标,该下标将整个标签略微向上移动并看上去很烂(中间是红色的)。 plot(1:10,type =“ l”)curve(x ^ 2,col = 2,add = ...

r plot legend subscript
2个回答
2
投票

假设最终目标只是使图例条目均匀分布,您可以考虑在图例中的每个元素上使用phantom(),以便保留相等的空间,但不绘制任何内容。尽管它确实会在图例的右侧创建少量空白,但这避开了计算调整的需要。在这种情况下,每个元素都无形地附加了“ i 1


2
投票

这不是一个很好的答案,但是可以。 legend函数用基数R编写。在其中定义了另一个函数text2,该函数从主函数传递给它的...参数中只有一个[x,y )向量。 adj仅使用此单个参数写入所有标签,因此,我认为使用text2函数进行的调整没有某种技巧或解决方法是不可能的。

© www.soinside.com 2019 - 2024. All rights reserved.