有没有办法以这样的方式绘制线条,使它们从点的一侧开始,或者让符号在前景中?
我的解决方案是让符号更大更明显。
编辑1:它适用于R程序的情节{graphics}。
编辑2:每个热门请求的代码。
legend(2,.4,bty='n', c('sugar','citrus','none'), pch=c('s','c','u'), pt.bg='white',lty= c(1,2,3), lwd=1.5, title="Condition",pt.cex=c(1.5),cex=1.5)
编辑3:这是针对情节(type ='b')解决的,但不知何故不适用于传奇。
感谢阅读!
答案 0 :(得分:2)
我能想到的唯一一件事就是手动完成短划线长度,直到最终看起来像你想要的那样。例如,这个:
> plot(1,1)
> legend(c("A", "B"), col = 1:2, x = 1, y = .8, lty="99", pch=1:2)
生成下面的图片。
lty
参数允许您将行和短划线的长度指定为十六进制字符。在这种情况下,它会创建一条长度为9
的行,然后创建一个长度为9
的空格,然后重复。看起来9是关于普通pch符号周围空间的最佳拟合。
请注意,您可能需要根据图像大小,符号等进行调整。我的建议最终是从R导出图像并修改图像以满足图形编辑软件的需要。
答案 1 :(得分:1)
您还可以使用R(pch = 21:25)提供的填充点,并使用pc.bg指定填充颜色,在创建图例时,该颜色将传递给points
调用。
plot(1,1)
legend(c("A", "B"), col = 1:2, x = 1, y = .8, lty=1, pt.bg=1:2, pch=21:22)
生成以下内容:
答案 2 :(得分:1)
根据@JeffAllen的建议,这是一种获得我认为你可能想要的东西的方法。它需要修改legend()
函数以返回点的位置(这些点由x1
中的y1
和body(legend)[[46]]
给出。
legend2 <- legend
body(legend2)[[49]] <- quote(
invisible(list(rect = list(w = w, h = h, left = left, top = top),
text = list(x = xt, y = yt), points = list(x = x1, y = y1)))
)
制作情节:
plot(-100:100, -100:100, type = "b")
绘制图例时,在线条上绘制白色圆圈(pch = 21
和pt.bg = 'white'
),并将legend2()
无形中返回的值指定给对象。另请注意对pt.lwd
和pt.cex
的更改。
myLegend <- legend2(1, .8, bty = 'n', c('sugar','citrus','none'), pch = 21,
pt.bg = 'white', pt.lwd = 0, lty = c(1, 2, 3), lwd = 1.5, title = "Condition",
pt.cex = c(1.8), cex = 1.5)
最后,使用points()
绘制您要在图例中使用的字符,从对象myLegend
提供x和y值。
points(myLegend$points$x, myLegend$points$y, pch = c('s','c','u'), cex = 1.5)
这应该会让你得到类似的东西: