首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在R中绘图时如何更改图例框宽度

在R中绘图时如何更改图例框宽度
EN

Stack Overflow用户
提问于 2016-07-07 05:18:01
回答 2查看 27.6K关注 0票数 2

我使用下面的脚本在R中生成一个图例,但是图例框太小了…如何增加盒子的宽度?

代码语言:javascript
运行
复制
legend("topleft", lty = 1, legend = c("Sub_metering_1","Sub_metering_2","Sub_metering_3"),col = c("black","red","blue"))
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-07 06:10:02

在绘制图表和图例之后,您可能正在调整图表的大小。如果是这种情况,并且您希望保留该框,一种选择是绘制图形,调整其大小,然后生成图例。也许更好的选择是将窗口大小调整为所需的宽度:

代码语言:javascript
运行
复制
# on Windows, you can use the `windows` function. elsewhere, try quartz or X11
windows(height = 7, width = 3.5)
plot(hp ~ mpg, data = mtcars)

leg <- legend("topleft", lty = 1,
    legend = c("Sub_metering_1","Sub_metering_2","Sub_metering_3"),
    col = c("black","red","blue"),
    #plot = FALSE,
      #bty = "n")
)

还可以通过向legend函数提供一对x和y坐标来精确定义长方体的放置位置。这些值表示框的左上角和右下角。legend函数将实际生成长方体左上角的坐标以及宽度和高度。默认情况下,它以不可见的方式返回它们,但您可以将它们分配给一个对象,如果您对legend使用plot = FALSE选项,则可以捕获这些坐标并根据需要对其进行修改,而无需实际绘制图例。

代码语言:javascript
运行
复制
windows(height = 7, width = 3.5)
plot(hp ~ mpg, data = mtcars)

legend(x = c(9.46, 31), y = c(346.32, 298),
    legend = c("Sub_metering_1","Sub_metering_2","Sub_metering_3"),
    col = c("black","red","blue"),
    lty = 1)

legend函数将实际生成长方体左上角的坐标(这就是我得到9.46和346.62的坐标)以及长方体的宽度和高度。默认情况下,它以不可见的方式返回它们,但您可以将它们分配给一个对象,如果您对legend使用plot = FALSE选项,则可以捕获这些坐标并根据需要对其进行修改,而无需实际绘制图例。

代码语言:javascript
运行
复制
plot(hp ~ mpg, data = mtcars)
leg <- legend("topleft", lty = 1,
    legend = c("Sub_metering_1","Sub_metering_2","Sub_metering_3"),
    col = c("black","red","blue"),
    plot = FALSE)

# adjust as desired
leftx <- leg$rect$left
rightx <- (leg$rect$left + leg$rect$w) * 1.2
topy <- leg$rect$top
bottomy <- (leg$rect$top - leg$rect$h) * 1

# use the new coordinates to define custom
legend(x = c(leftx, rightx), y = c(topy, bottomy), lty = 1,
    legend = c("Sub_metering_1","Sub_metering_2","Sub_metering_3"),
    col = c("black","red","blue"))
票数 4
EN

Stack Overflow用户

发布于 2018-09-01 21:55:30

图例宽度的一部分由您使用的标签的最长宽度决定,该宽度是通过strwidth计算的。下面是一个简单的例子,如何使用legend(..., text.width = ...)将大小减半或加倍。

代码语言:javascript
运行
复制
plot(1)
text =  c("Sub_metering_1","Sub_metering_2","Sub_metering_3")
legend("topleft"
       ,lty = 1
       ,legend = text
       ,col = c("black","red","blue")
       )
strwidth(text)
# [1] 0.1734099 0.1734099 0.1734099
# half the length
legend("bottomleft"
       ,lty = 1
       ,legend = text
       ,text.width = strwidth(text)[1]/2
       ,col = c("black","red","blue")
       )
# double the length
legend("center"
       ,lty = 1
       ,legend = text
       ,text.width = strwidth(text)[1]*2
       ,col = c("black","red","blue")
)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38233924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档