正如 Headers 所说: How can I plot a legend outside the plotting area when using base graphics?
我想要摆弄 layout
并制作一个只包含图例的空图,但我会对使用基本图形工具的方式感兴趣,例如, par(mar = )
在图例右侧的图例中获得一些空间 .
这是一个例子:
plot(1:3, rnorm(3), pch = 1, lty = 1, type = "o", ylim=c(-2,2))
lines(1:3, rnorm(3), pch = 2, lty = 2, type="o")
legend(1,-1,c("group A", "group B"), pch = c(1,2), lty = c(1,2))
生产环境 :
但如上所述,我希望图例位于绘图区域之外(例如,图表/图表的右侧) .
10 回答
也许你需要的是
par(xpd=TRUE)
,以便能够在情节区域之外绘制东西 . 因此,如果您使用bty='L'
进行主图,则右侧会有一些空间用于图例 . 通常这会被剪切到绘图区域,但是做一些调整,你可以得到一个尽可能正确的传奇:没人提到
legend
使用负inset
值 . 下面是一个示例,其中图例位于图的右侧,与顶部对齐(使用关键字"topright"
) .inset=c(-0.2,0)
的第一个值可能需要根据图例的宽度进行调整 .除了已经提到的ondes(使用
layout
或par(xpd=TRUE)
)之外,另一个解决方案是在整个设备上使用透明图覆盖您的绘图,然后将图例添加到该图中 .诀窍是在整个绘图区域上覆盖(空)图形并将图例添加到该图形 . 我们可以使用
par(fig=...)
选项 . 首先,我们指示R在整个绘图设备上创建一个新的图:需要设置
oma
和mar
,因为我们希望绘图的内部覆盖整个设备 . 需要new=TRUE
来阻止R启动新设备 . 然后我们可以添加空图:我们准备添加传奇:
将在设备的右下角添加一个图例 . 同样,我们可以将图例添加到顶部或右边距 . 我们唯一需要确保的是原始图的边距足够大以容纳图例 .
把所有这些都放到一个功能中;
还有一个例子 . 首先创建绘图,确保底部有足够的空间来添加图例:
然后添加图例
导致:
很抱歉复活旧线程,但今天我遇到了同样的问题 . 我找到的最简单的方法如下:
在此处找到:http://www.harding.edu/fmccown/R/
我喜欢这样做:
唯一需要调整的是将右边距设置得足够宽以容纳图例 .
但是,这也可以自动化:
我只能提供已经指出的布局解决方案的示例 .
最近我发现在你想要的情节区域之外打印图例非常简单有趣 .
在图的右侧创建外边距 .
创建一个情节
添加图例,只需使用locator(1)函数,如下所示 . 然后,您必须在加载以下脚本后单击所需的位置 .
试试吧
您可以使用Plotly R API,使用任一代码执行此操作,也可以通过将图例拖动到所需位置来从GUI执行此操作 .
这是一个例子 . 图表和代码也是here .
您可以通过将x和y值中的一个指定为100或-100来将图例定位在图表外部 .
以下是其他选项:
外侧右下方
list("x" = 100, "y" = 0)
list("x" = 100, "y"= 1)
右上方list("x" = 100, "y" = .5)
外右中list("x" = 0, "y" = -100)
在左下方list("x" = 0.5, "y" = -100)
在中心下list("x" = 1, "y" = -100)
右下然后回应 .
response = p$plotly(x,y,x2,y2, kwargs=list(layout=layoutstyle));
当您拨打电话时,Plotly会在您的图表中返回一个网址 . 您可以通过调用
browseURL(response$url)
来更快地访问它,这样它就会在您的浏览器中打开您的图形 .这给了我们这张图 . 您还可以从GUI中移动图例,然后图形将相应缩放 . 完全披露:我在Plotly团队 .
尝试
layout()
过去我曾用过这个,只需在下面创建一个空图,在1/4左右正确缩放并手动将图例部分放入其中 .这里有一些关于
legend()
的旧问题应该可以帮到你 .在我看来,添加另一个非常优雅的简单替代方案 .
你的情节:
传说:
结果:
这里只有图例的第二行添加到您的示例中 . 反过来:
inset=c(0,1)
- 按(x,y)方向的绘图区域的分数移动图例 . 在这种情况下,图例位于"bottomright"
位置 . 它在0方向上移动0个绘图区域(因此保持在"right"),并在y方向上绘制1个绘图区域(从下到上) . 它恰好出现在情节的正上方 .xpd=TRUE
- 让我们的图例出现在绘图之外区域 .horiz=TRUE
- 指示生成水平图例 .bty="n"
- 摆脱图例边界框的样式细节 .向侧面添加图例时同样适用:
在这里,我们只是调整了图例位置,并在图的右侧添加了额外的边距空间 . 结果: