我正在尝试使用图表下方的图例创建一个ggplot2图。
ggplot2书在第112页上说“传说的位置和对齐由主题设置legend.position控制,值可以是右,左,上,下,无(无图例)或数字位置”。
以下代码有效(因为“正确”是默认设置),并且它也可以使用“none”作为图例位置,但是“left”,“top”,“bottom”都会失败并显示“Error in grid.Call.graphics(“L_setviewport”,pvp,TRUE):视口的非有限位置和/或大小“
library(ggplot2)
(myDat <- data.frame(cbind(VarX=10:1, VarY=runif(10)),
Descrip=sample(LETTERS[1:3], 10, replace=TRUE)))
qplot(VarX,VarY, data=myDat, shape=Descrip) +
opts(legend.position="right")
我做错了什么?重新定位一个传奇必须非常普遍,所以我认为它就是我。
答案 0 :(得分:56)
在版本&gt; 0.9.3(弃用opts
时)
theme(legend.position = "bottom")
旧版本:
不幸的是,这是ggplot2中的一个错误,我真的很希望在今年夏天修复它。
更新
使用最新版本的 ggplot2 修复了涉及opts(legend.position = "left")
的错误。此外,0.9.0版本引入了guide_legend
和guide_colorbar
,可以更精细地控制图例本身内项目的外观和位置。例如,该功能可指定图例项目的行数和列数。
答案 1 :(得分:4)
在这里时,只需对这些答案进行一些更新即可。
如Hadley所述,您可以使用theme(legend.position = "bottom")
或与之手动theme(legend.position = c(.2,.85))
如果您希望图例水平放置,请使用theme(legend.position = c(.2,.85), legend.direction = "horizontal")
答案 2 :(得分:3)
您可以随时手动放置图例 - 但由于标签仍然是堆叠/垂直的,因此看起来很丑陋。我真的希望hadley有时间解决这个问题: - )
p <- qplot(VarX,VarY, data=myDat, shape=Descrip) +
opts(legend.position=c(.5,0.9),plot.margin = unit(c(6,0,0,0), "lines"))
答案 3 :(得分:2)
在较新版本的ggplot2
中,您可以使用+ theme(legend.position='bottom')
。
qplot(VarX,VarY, data=myDat, shape=Descrip) +
theme(legend.position='bottom')
有关更多传说的好处,请参阅Cookbook for R - Legends。
在回复评论时,如果在ggplot中间调用theme_update()
,则+ theme_update()
不会启动(如theme_update(legend.position='bottom')
qplot(VarX,VarY, data=myDat, shape=Descrip)
中所述,仅在后续时间。它还会修改活动主题而不仅仅是特定情节。所以你可以这样做:
<p>Filter by gender</p>
<select class="filter-users">
<option value="female">Female</option>
<option value="male">Male</option>
</select>
<p>Filter by city</p>
<input class="filter-users" type="text" name="city">
与上述结果相同,不同之处在于后续图表也将默认为底部的图例。