ZAC*_*ZAC 3 r legend ggplot2 legend-properties
我在ggplot中有一个情节,我希望覆盖我用基本R代码创建的地图图例.我不知道如何将基础R图形覆盖在ggplot之上,并且非常感谢您的帮助.
关于这个我想改变的传奇,有几件我不喜欢的东西(这导致我认为使用基础R图形更容易这样做).
特别是,我希望消除图例中框之间的空白区域,我也希望在框之间添加刻度线.我还希望在第一个刻度标记下面加上"5",分隔第一个和第二个方框; 分隔第二和第三个方框的刻度线下方的"10"; 分隔第三个和第四个方框的刻度标记下方的"20".我还希望使图例中的框与我的图中的"bins"之一相同(我使用stat_bin2d图层).
相关代码:
ggplot()+
stat_bin2d(restaurants.df,binwidth=c(1500,2500), alpha=0.6,aes(x=X,y=Y,fill=cut(..count.., c(0,5,10,20,Inf))))+
scale_fill_manual("No. of Restaurants",labels=c("<5","5-10","10-20",">20"),values=cols, guide = guide_legend(direction = "horizontal", title.position = "top", ticks=TRUE,label.position="bottom")) +
theme(legend.background = element_rect(colour = "black"),
legend.key = element_rect(color='black'))
Run Code Online (Sandbox Code Playgroud)
@ baptiste的评论让我有兴趣尝试创造一个可以成为传奇的情节.这是我的尝试.我geom_tile用来创建一个将成为传奇的情节.OP没有提供样本数据,因此我使用内置mtcars数据创建了一个图,只是为了将图例放在旁边.然后我grid.arrange用来创建最终的plot-plus-legend布局.
library(ggplot2)
library(grid)
library(gridExtra)
## Create legend
# Fake data
dat = data.frame(x=1:4, y="Group", col=factor(1:4))
# Create a plot that will become the legend
legend = ggplot(dat, aes(x,y, fill=col)) +
geom_tile(show.legend=FALSE) +
scale_x_continuous(breaks=c(1.5,2.5,3.5), labels=c(5,10,20)) +
scale_fill_manual(values=c("yellow","orange","red","darkred")) +
labs(y="", x="") +
ggtitle("No. of Restaurants") +
theme_bw() +
theme(panel.border=element_blank(),
axis.ticks.y=element_blank(),
axis.text.y=element_blank())
## Create a plot to put next to the legend
p1 = ggplot(mtcars, aes(mpg, wt)) +
geom_point() +
theme(plot.margin=unit(c(0,0,0,0)))
# Arrange plot and legend
grid.arrange(p1, arrangeGrob(rectGrob(gp=gpar(col=NA)),
legend,
rectGrob(gp=gpar(col=NA)),
heights=c(0.42,0.16,0.42)),
widths=c(0.8,0.2))
Run Code Online (Sandbox Code Playgroud)