R 使用ggplot2生成带有移位标签的颜色图例

R 使用ggplot2生成带有移位标签的颜色图例,r,ggplot2,R,Ggplot2,我通常使用渐变绘制地图,通常我使用一个颜色图例,在绘图中显示如下: 我也希望在R中使用ggplot2。如果仅使用: g <- g + scale_fill_brewer(palette="Greens", na.value="NA", name=legendtitle) #g is the previously saved plot with some simple options, prepared with cut() g这里有一些东西可以让你开始 其思想是使用cut() 通过将图

我通常使用渐变绘制地图,通常我使用一个颜色图例,在绘图中显示如下:

我也希望在R中使用ggplot2。如果仅使用:

g <- g + scale_fill_brewer(palette="Greens", na.value="NA", name=legendtitle)
#g is the previously saved plot with some simple options, prepared with cut()

g这里有一些东西可以让你开始

其思想是使用
cut()

通过将图例放在绘图底部,
ggplot
自动将图例标签放在值之间

library(ggplot2)

dat <- data.frame(x=0:100, y=runif(101, 0, 10), z=seq(0, 12, len=101))

dat$col <- cut(
  dat$z, 
  breaks=c(0, 2, 4, 6, 8, 10, Inf), 
  labels=c(2, 4, 6, 8, 10, "-->")
)

ggplot(dat, aes(x, y, col=col)) + 
  geom_point(size=10) + 
  scale_colour_brewer("", palette="Greens") +
  theme(legend.position="bottom")
库(ggplot2)

dat问题的第一部分可以用连续色标来解决。因此,除了离散的比例外,只需添加一个连续的颜色比例(可能需要重新标记)。然后你可以把离散比例放在顶部或底部,你应该被设置好。下面是一个可复制的示例:

require(scales)
nlvls <- nlevels(diamonds$cut)
ggplot(diamonds, aes(x = price, fill = cut)) +
  geom_histogram(position = "dodge", binwidth = 1000) +
  scale_fill_brewer(palette="Greens", na.value="NA", guide='none') +
  theme(legend.position = 'bottom') +
  geom_line(aes(x=price, y=0, color=as.numeric(cut)), linetype=0) +
  scale_color_continuous(name = 'cont. scale',
                         low = brewer_pal(pal = "Greens")(nlvls)[1], 
                         high = brewer_pal(pal = "Greens")(nlvls)[nlvls])
require(比例)

nlvls由于您没有提供最终要使用的几何图形,我对Andrie的答案做了一点修改。我包括了一个矩形几何图形(例如,
geom\u col
)来填充完整的图例框。使用合适的α值
0:1
关闭条形图

# data  
set.seed(1324)
dat <- data.frame(x=0:100, y=runif(101, 0, 10), z=seq(0, 12, len=101))
# add discrete values
dat$col <- cut(include.lowest = T,
  dat$z, 
  breaks=c(0, 2, 4, 6, 8, 10, Inf), 
  labels=c(2, 4, 6, 8, 10, "-->")
)
# the plot
ggplot(dat, aes(x,y,fill=col)) + 
  geom_point(aes(col=col),size=8, show.legend = F) +   
  geom_col(alpha=0)+
  scale_fill_brewer("", palette = "Greens")+
  scale_colour_brewer("", palette="Greens")+
  scale_alpha_discrete(range=c(0,1))+
  guides(fill = guide_legend(nrow=1, override.aes = list(alpha = 1), 
                                     label.position="bottom",
                                     label.hjust = .5)) +
  theme(legend.position="bottom",
        legend.key.width = unit(3, "cm"), 
        legend.key.height = unit(1, "cm"))
#数据
种子集(1324)

在我的例子中,使用连续色标的dat会令人困惑。这不仅仅是一个条形图,而是一个2D世界地图,所以我需要清楚地定义标高,以便与其他地图轻松对峙。好的建议,谢谢。多亏了你的回答,我更新了我的问题。我对色彩传奇还不满意,tho。如果您还有任何建议,他们将不胜感激。请不要编辑您的问题,使其成为新问题。这可能会使已经提供的答案无效。我真的不知道我会怎么做。对我来说,这个问题看起来和以前一样,只是在归档目标的方式上更加具体(感谢编辑),即克隆上面用渐变生成的第一个图例。图例元素之间的间距由
legend.margin
主题元素控制。@Biran如果我没弄错的话,这是在图例周围添加的空间,不是在单个图例元素之间。谢谢你的回答,但我不认为这比我在2014年11月的问题中的编辑更好。理想情况下,人们希望:a)颜色框之间的标签(可以这样做,但需要摆弄
hjust
值,它们从来都不是完美的)和b)颜色框之间没有间距。