我通常使用GrADS绘制地图,通常我使用的颜色图例在图中将如下所示:
我想在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()
输出当然是这样的:
所以我希望能够做两件事:
编辑: 在下面的答案的帮助下,我来到这里:
我的问题的第1部分几乎已经解决了,即使它看起来并不完美。我真的想摆脱颜色之间的空白,任何想法?第2部分......我完全不知道。
我的代码段使用:
theme(legend.position="bottom", legend.key.width = unit(1, "cm"), legend.key.height = unit(0.3, "cm")) + guides(fill=guide_legend(label.position = "bottom", label.hjust = 1.2))
答案 0 :(得分:4)
这是让你入门的东西。
您的想法是使用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")
答案 1 :(得分:1)
由于你没有提供你想要使用的geom,我稍微修改了Andrie的答案。我添加了一个矩形geom(例如geom_col
)来填充完整的图例框。使用合适的0:1
alpha值关闭条形。
# 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"))
答案 2 :(得分:0)
问题的第一部分可以用连续色标来解决。因此,除了您的离散比例,只需添加一个连续的色标(您可能需要重新标记它)。然后你可以将离散比例放在顶部或底部,你应该设置。这是一个可重复的例子:
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])
对于箭头,我完全不知道如何使用ggplot2
执行此操作。你可以和grid
一起破解某些东西,但它可能比它的价值更麻烦。